也许有人可以解释下面的行为。我知道从 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();
}
为什么是这样?