在blackberry jde 4.5.0中启用泛型

时间:2010-09-17 21:14:44

标签: blackberry

当我在blackberry中编译我的应用程序时,它显示以下错误。 -source 1.3不支持泛型 (使用-source 5或更高版本来启用泛型) 如何解决这个问题

4 个答案:

答案 0 :(得分:4)

Java 1.3是野蛮的,任何人都不应该遭受它的侮辱。幸运的是,有一个解决方案!

在Java 1.5中引入了泛型,枚举,更改覆盖中的返回签名以及几乎所有使java可用的内容。 (见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构建文件中调用retrotranslator的部分:


 < 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"
 />

通过preverify.exe运行转换后的jar,然后将其交给rapc.exe,您将拥有一个使用Java 1.5编写的Blackberry应用程序。

编辑:我错过了原帖中的关键细节。除了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 w / java.lang.StringBuilder的应用程序,2)字符串转换java.lang.Stringbuilder(以及compat shim中的所有其他内容)生存在com.mycorp.java.lang.StringBuilder中并将其构建为JAR文件。 3)使用JAR文件w / retrotranslator和retrotranslator将更新对java.lang.StringBuilder的所有字节码引用,以便它们现在指向com.mycorp.java.lang.StringBuilder。现在你有了一个可以在Blackberry上运行的兼容java 1.3的字节码。

如果有人对此事感兴趣,请与我联系。我可以考虑开源我的compat库。

答案 1 :(得分:1)

这是J2ME的限制,它使用J2SE的子集(没有集合,反射等)和Java语言级别1.3。为J2SE编写的任何代码都很可能需要手动移植。

答案 2 :(得分:0)

似乎尚未支持JDK5。

同样的问题被问到on the blackberrry forum,但关于枚举支持:

alt text

答案 3 :(得分:0)

可悲的是,BlackBerry api在Java版本方面非常落后。没有泛型,没有地图,没有枚举 - 它基于JDK 1.3。

我认为无法在BlackBerry应用中启用此功能。如果你找到一个,我会非常有兴趣听到它。