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

问题描述 投票:0回答:2

我有一个类,它使用 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 打开它时,通用参数就被很好地识别了。 有谁知道这个问题并有解决办法吗?

eclipse generics javac
2个回答
0
投票

我想说问题在于您使用

CopyOnWriteIdentityMap
类的方式。 我假设您正在使用此类:

  org.eclipse.osgi.framework.eventmgr.CopyOnWriteIdentityMap

如果你查看javadocs,你会发现它不是一个泛型类。 我还得到这样的印象(从它的包位置),它并不是一个通用实用程序类。

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


0
投票

也许,我一直在犯同样的错误,但它们似乎很难理解。 例如,请参阅我的帖子

http://www.coderanch.com/forums/posts/list/80/467890#2679297

。 我不是专家,但是,我发现 Angelika Langer (http://www.angelikalanger.com/Publications.html) 的课程对于咨询很有吸引力,因为网站上提供了与 Java 泛型相关的教程。 您对此事有何建议?

© www.soinside.com 2019 - 2024. All rights reserved.