Tôi đang cố gắng để mã một ứng dụng chạy nền tảng java khác nhau như J2SE, J2ME, Android, vv Tôi đã biết rằng tôi sẽ phải viết lại hầu hết các Giao diện người dùng cho mỗi nền tảng, nhưng muốn sử dụng lại logic lõi.Làm thế nào để đối phó với các lớp phổ biến nhất bị thiếu trên J2ME
Giữ di động lõi này bao gồm ba nhược điểm mà tôi biết:
- Giữ cho cái cũ Java 1,4 cú pháp, không sử dụng bất kỳ tính năng ngôn ngữ tốt đẹp của Java 5.0
- chỉ sử dụng bên ngoài thư viện được biết là hoạt động trên các nền tảng đó (nghĩa là: không sử dụng JNI và không có phụ thuộc vào các libs khác vi phạm quy tắc này)
- chỉ sử dụng các lớp có mặt trên tất cả những nền tảng
Tôi biết cách để vượt qua (1): mã trong 5,0 phong cách và tự động chuyển đổi nó đến 1,4 (retroweaver - đã không thử nó, nhưng có vẻ ok).
Tôi nghĩ rằng (2) là sự cố mà tôi chỉ phải chấp nhận.
Bây giờ tôi muốn biết nền tảng tốt nhất là gì cho (3), đặc biệt là các lớp sưu tập mà tôi nhớ nhiều nhất. Tôi có thể nghĩ đến những:
- Hầu hết các lập trình viên tôi biết chỉ không sử dụng
Set
,Map
,List
, vv và dự phòng đểVector
và Mảng đồng bằng. Tôi nghĩ rằng điều này làm cho mã xấu xí ngay từ đầu. Nhưng tôi cũng biết rằng lựa chọn đúng giữaTreeSet/Hashset
hoặcLinkedList/ArrayList
rất quan trọng đối với hiệu suất và luôn sử dụngVector
và mảng không thể đúng. - Tôi có thể viết mã các triển khai của riêng mình cho các lớp đó. Điều này dường như đang phát minh ra bánh xe, và tôi nghĩ rằng tôi không thể làm điều đó tốt như những người khác đã làm.
- Vì Java là mã nguồn mở, tôi có thể lấy mã nguồn của khung công tác Bộ sưu tập J2SE và đưa vào ứng dụng của tôi khi xây dựng cho J2ME. Tôi không biết nếu đây là một ý tưởng tốt, mặc dù. Có lẽ có lý do chính đáng để không làm điều này.
- Có thể đã có các thư viện ở đó, xây dựng lại các tính năng quan trọng nhất của khung bộ sưu tập, nhưng được tối ưu hóa cho các hệ thống cấp thấp, có lẽ không thực hiện chức năng được sử dụng thường xuyên. Bạn có biết gì không?
Cảm ơn câu trả lời và ý kiến của bạn!
Chỉnh sửa: Cuối cùng tôi đã tìm thấy một giải pháp phức tạp nhưng thú vị bằng cách cung cấp câu trả lời của riêng tôi và chấp nhận nó, giải pháp sẽ hiển thị ở trên cùng. Nhưng ngược lại, câu trả lời của tôi vẫn ở dưới cùng.
Bạn có sẵn sàng cung cấp backport của bạn về khung bộ sưu tập? Retrotranslator là tuyệt vời, nhưng tôi đã phải viết backports của riêng tôi chỉ để có được autoboxing làm việc. – Ralf
Bất kỳ cơ hội nào bạn có thể chia sẻ backport này? – domino