我们目前有一个类不能用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
的实现以便编译的一些想法。我甚至不关心编译器警告...
答案 0 :(得分:11)
我会尝试明确指定边界,如下所示:
return this.<A,B,Map<A,B>>method(a,b);
但是,更一般地说,我根本不需要类型参数C
。 method
的参数或其返回类型都没有引用C
,因此如果您可以更改method
的签名,我将完全省略该类型参数。