3

也许有人可以解释下面的行为。我知道从 Java 6 到 Java 7 有一些通用的类型处理更改,但我找不到一个来解释这一点。

这个库正在发生这种情况:

<dependency>
    <groupId>org.apache.felix</groupId>
    <artifactId>org.apache.felix.framework</artifactId>
    <version>3.2.2</version>
</dependency>

以及以下演示代码:

import org.apache.felix.framework.util.manifestparser.ManifestParser;

ManifestParser manifestParser = new ManifestParser(null, null, null, null);
for (Capability capability : manifestParser.getCapabilities()) {
    capability.toString();
}

// where the signature of getCapabilities() is:
// public List<Capability> getCapabilities() { return m_capabilities; }
// and there are no other methods with similar signatures or names

此演示代码在 JDK 6(x86、1.6.0_45、32 位)上编译得很好,但在 JDK 7(x86、1.7.0_25、32 位、同一主机)上编译失败:

// line number matches the for loop
java: incompatible types
required: org.apache.felix.framework.capabilityset.Capability
found:    java.lang.Object

经过一番摸索,我有一个解决方法,但没有解释。对演示代码的以下修改使用 JDK 7 编译:

ManifestParser manifestParser = new ManifestParser(null, null, null, null);
List<Capability> capabilities = manifestParser.getCapabilities();
for (Capability capability : capabilities) {
    capability.toString();
}

为什么是这样?

4

2 回答 2

3

请参阅如何使用 OpenJDK 7 编译 mavenized OSGi 4.3 bundle?

由于该 felix jar 中的 OSGi 类,您不能使用它来编译 Java 7。

于 2013-10-24T10:41:51.627 回答
2

你确定没有类路径问题,比如类路径中同一个类的不同版本?List如果您在类路径中有同一个类的两个版本,一个用于 java 1.4 返回,一个用于 java 5+ 返回,这可能是可能的List<Capability>

于 2013-10-22T21:15:12.107 回答