Включить дженерики в BlackBerry JD 4.5.0 - PullRequest
1 голос
/ 18 сентября 2010

Когда я скомпилировал свое приложение в blackberry, оно показывает следующую ошибку. Обобщения не поддерживаются в -source 1.3 (используйте -source 5 или выше для включения обобщения) как решить эту проблему

Ответы [ 4 ]

4 голосов
/ 20 сентября 2010

Java 1.3 варварская, и никто не должен страдать от ее унижений. К счастью, есть решение!

Обобщения, перечисления, изменение сигнатуры возврата в переопределениях и почти все, что делает Java пригодным для использования, было введено в Java 1.5. (см. http://en.wikipedia.org/wiki/Java_version_history). К счастью, большая часть java 1.5 была разработана для обеспечения обратной совместимости и не требует изменений JVM / байт-кода. (или, возможно, это было неудачно, поскольку реализация обобщений в Java была намного слабее, чем в C #. просто попробуйте создать универсальный класс со статическими методами / полями, которые используют универсальный параметр)

Эта статья IBM хорошо объясняет фон: http://www.ibm.com/developerworks/java/library/j-jtp02277.html

Но это сходство JVM позволило создать такие инструменты, как: http://retrotranslator.sourceforge.net/

Это раздел из моего сборочного файла Ant, который вызывает ретро-переводчик:


 &lt java jar="${transformer.jar.exe}"
        fork="true"
        classpath="${epic-framework.dir}/tools/retrotranslator-runtime13-1.2.9.jar:${epic-framework.dir}/tools/retrotranslator-runtime-1.2.9.jar"
    args="-srcjar ${build.dir}/classes5.jar -target 1.3 -destjar ${build.dir}/classes5to3.jar"
 />

Запустите преобразованный jar-файл через preverify.exe, а затем передайте его в rapc.exe, и у вас будет работающее приложение Blackberry, написанное на Java 1.5.

Редактировать: я пропустил ключевую деталь в своем первоначальном сообщении. В дополнение к Java 1.3 в иерархии классов Blackberry отсутствуют многие классы, которые обычно были бы частью Java SE 1.3 JDK. Сначала вы нажмете StringBuilder - преобразование javac («string» + «otherstr» + «blah blah») в StringBuilder.append («string»). Append («otherstr»). Append («blah blah») , Этот класс не существует на BB, так что вы сломаетесь. Однако у BB есть StringBuffer, поэтому написание адаптера между ними довольно просто. Единственный улов в том, что BB запрещает приложениям добавлять классы в java. *. Это может быть очень эффективно исправлено в процессе сборки: 1) построить приложение на Java 1.5 с java.lang.StringBuilder на пути к классам, 2) преобразовать строковое преобразование java.lang.Stringbuilder (и всего остального в вашей компасной оболочке), чтобы жить в com.mycorp.java.lang.StringBuilder и встроить его в файл JAR. 3) Используйте этот JAR-файл с ретро-переводчиком и ретро-переводчиком, чтобы обновить все ссылки на байт-коды на java.lang.StringBuilder, чтобы они теперь указывали на com.mycorp.java.lang.StringBuilder. Теперь у вас есть java 1.3-совместимый байт-код, который можно запустить на Blackberry.

Если кому-то это интересно, свяжитесь со мной. Я мог бы взглянуть на открытый источник имеющейся у меня библиотеки Compat.

1 голос
/ 19 сентября 2010

Это ограничение J2ME, которое использует подмножество J2SE (без сборов, отражений и т. Д.) И уровень языка Java 1,3.Любой код, написанный для J2SE, скорее всего, нужно будет перенести вручную.

0 голосов
/ 18 сентября 2010

К сожалению, API BlackBerry сильно отстает в плане версий Java.Нет Generics, нет карт, нет Enums - он основан на JDK 1.3.

Я считаю, что нет возможности включить эту функцию в вашем приложении BlackBerry.Если вы найдете один, мне было бы очень интересно узнать об этом.

0 голосов
/ 18 сентября 2010

Кажется, JDK5 еще не поддерживается.

Тот же вопрос задавался на форуме blackberrry , но о поддержке enum:

alt text

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...