【发布时间】:2012-04-03 15:37:44
【问题描述】:
我们目前有一个类不能用 openjdk 6 编译。以下缩短的类重现了这个错误:
public class Copy implements ICopy {
public <A,B extends List<A>,C extends Map<A,B>> A method(A a, B b) {
A something = null;
return something;
}
@Override
public <A,B extends List<A>> A method2(A a, B b) {
return method(a,b);
}
}
界面很简单,就是显示,不能更改method2的签名:
public interface ICopy {
public <A,B extends List<A>> A method2(A a, B b);
}
它可以使用 oracles java 版本和 openjdk 7 进行编译 - 但使用 openjdk 6 会失败,不幸的是,我们必须使用该版本来编译(原始)代码。
错误信息是
Copy.java:15: invalid inferred types for C; inferred type does not conform to declared bound(s)
inferred: java.util.Map<A,B>
bound(s): java.util.Map<A,B>
return method(a,b);
^
我所需要的只是一些想法,如何更改method2 的实现以便它能够编译。我什至不会关心编译器警告...
【问题讨论】:
-
看起来像一个错误。 Eclipse 编译器和 Sun 的编译器对此只字未提。
-
@GuillaumePolet - 一个错误或对该 java 版本的泛型类型的过度严格处理。而且,是的,eclipse 不会抱怨(这使得重现这个杀死构建的讨厌错误变得相当复杂)。