我有一个类,它使用Eclipse OSGI jar(org.eclipse.osgi_3.7.2.v20120110-1415.jar)中的一个类,它在Eclipse IDE和它的编译器中编译得很好。但是,如果我尝试使用Ant和JDK 1.7编译器编译此类,则编译器会输出以下错误:
[javac] /data/ant/sw_jdk1.7/test-Java7/com.tsystems.favbg.ui.core/src/com/
tsystems/favbg/ui/core/job/AbstractLoader.java:24:
error: type CopyOnWriteIdentityMap does not take parameters
[javac] private final CopyOnWriteIdentityMap<LoaderListener, String>
eventListenerMap = new CopyOnWriteIdentityMap<>();
和
error: cannot infer type arguments for CopyOnWriteIdentityMap;
[javac] private final CopyOnWriteIdentityMap<LoaderListener, String>
eventListenerMap = new CopyOnWriteIdentityMap<>();
[javac] reason: cannot use '<>' with non-generic class CopyOnWriteIdentityMap
显然,javac不会将该类视为使用泛型。但是当我用Java Decompiler打开它时,通用参数得到了很好的认可。 有人知道这个问题并有解决方案吗?
答案 0 :(得分:0)
我会说问题在于您使用CopyOnWriteIdentityMap
类的方式。我假设你正在使用这个类:
org.eclipse.osgi.framework.eventmgr.CopyOnWriteIdentityMap
如果查看the javadocs,您会发现它不是通用类。我也得到了(从其包位置)它不打算成为通用实用程序类的印象。
当您在Eclipse中编译时,也许您正在使用不同版本的JAR ... 是一个泛型类。无论哪种方式,您通过Ant使用的编译器都认为它不是通用的。
答案 1 :(得分:0)
我在阅读基于JDK 1.6的SCJP认证书时发现了差异,并尝试编写(复制和粘贴)代码,在JDK 1.7中进行编译。
也许,我犯了同样的错误,但是他们似乎难以理解。例如,请参阅http://www.coderanch.com/forums/posts/list/80/467890#2679297上的帖子。我不是专家,但是,鉴于网站上有关Java Generics的教程,我发现Angelika Langer(http://www.angelikalanger.com/Publications.html)的课程对于咨询很有吸引力。 / p>
您对此事有何建议?