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