我有一个类,它使用 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 打开它时,通用参数就被很好地识别了。 有谁知道这个问题并有解决办法吗?
我想说问题在于您使用
CopyOnWriteIdentityMap
类的方式。 我假设您正在使用此类:
org.eclipse.osgi.framework.eventmgr.CopyOnWriteIdentityMap
如果你查看javadocs,你会发现它不是一个泛型类。 我还得到这样的印象(从它的包位置),它并不是一个通用实用程序类。
也许您在 Eclipse 中编译时使用的是不同版本的 JAR……它是一个泛型类。 无论哪种方式,您通过 Ant 使用的编译器都认为它不是通用的。