JDK 1.7编译器无法识别泛型类

时间:2012-06-25 13:44:03

标签: eclipse generics compiler-construction javac

我有一个类,它使用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打开它时,通用参数得到了很好的认可。 有人知道这个问题并有解决方案吗?

2 个答案:

答案 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>

您对此事有何建议?