0

我有一个类,它使用 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 打开它时,泛型参数被很好地识别。有人知道这个问题并有解决方案吗?

4

2 回答 2

0

我在阅读基于 JDK 1.6 的 SCJP 认证书时发现差异,并尝试编写(复制和粘贴)代码,在 JDK 1.7 中编译。

也许,我一直在犯同样的错误,但它们似乎很难理解。例如,请参阅我在http://www.coderanch.com/forums/posts/list/80/467890#2679297上的帖子。我不是专家,但是,鉴于网站上与 Java 泛型相关的教程,我发现 Angelika Langer (http://www.angelikalanger.com/Publications.html) 的课程对咨询很有吸引力。

你对此事有何建议?

于 2012-07-29T11:55:27.430 回答
0

我会说问题出在您使用CopyOnWriteIdentityMap课程的方式上。我假设你正在使用这个类:

  org.eclipse.osgi.framework.eventmgr.CopyOnWriteIdentityMap

如果您查看javadocs,您会发现它不是泛型类。我也(从它的包位置)得到它不打算成为通用实用程序类的印象。

当您在 Eclipse 中编译时,您可能正在使用不同版本的 JAR ......它一个泛型类。无论哪种方式,您通过 Ant 使用的编译器都认为它不是通用的。

于 2012-06-26T06:45:03.257 回答