Я пытаюсь кодировать приложение, которое запускает разные Java-платформы, такие как J2SE, J2ME, Android и т. Д. Я уже знаю, что мне придется переписать большую часть пользовательского интерфейса для каждой платформы, но я хочу повторно использовать основную логику.
Сохранение портативности этого ядра связано с тремя известными мне недостатками:
- Сохранение старого синтаксиса Java 1.4, без использования каких-либо хороших языковых функций Java 5.0.
- только с использованием внешних библиотек, которые, как известно, работают на этих платформах (то есть: не используйте JNI и не имеете зависимостей от других библиотек, которые нарушают эти правила)
- только с использованием классов, которые присутствуют на всех этих платформах
Я знаю способы преодолеть (1): код в стиле 5.0 и автоматически преобразовать его в 1.4 (retroweaver - еще не пробовал, но вроде нормально).
Я думаю, что (2) - это проблема, с которой мне просто нужно смириться.
Теперь я хотел бы знать, что лучше всего подходит для (3), особенно для классов коллекций, которых я скучаю больше всего. Я могу думать о них:
- Большинство знакомых мне программистов просто не используют
Set
,Map
,List
и т. Д. И прибегают кVector
и обычным массивам. Я думаю, что это в первую очередь делает код уродливым. Но я также знаю, что правильный выбор междуTreeSet/Hashset
илиLinkedList/ArrayList
имеет решающее значение для производительности, и постоянное использованиеVector
и массивов не может быть правильным. - Я мог кодировать свои собственные реализации этих классов. Это похоже на изобретение велосипеда, и я думаю, что не смог бы сделать это так хорошо, как другие.
- Поскольку Java является открытым исходным кодом, я мог взять исходный код платформы J2SE Collections и включить его в свое приложение при сборке для J2ME. Но я не знаю, хорошая ли это идея. Возможно, есть веские причины не делать этого.
- Возможно, уже существуют библиотеки, которые перестраивают наиболее важные функции структуры коллекций, но оптимизированы для систем низкого уровня, возможно, за счет того, что не реализуют функциональность, которая используется нечасто. Вы знаете кого-нибудь?
Спасибо за ответы и мнения!
Изменить: я наконец нашел (сложное, но приятное) решение, и я подумал, что, предоставив свой собственный ответ и приняв его, решение станет видимым вверху. Но мой ответ, напротив, все еще в самом низу.