我们目前有一个类不能用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);
}
}
Run Code Online (Sandbox Code Playgroud)
界面很简单,只是显示,我们无法更改签名method2:
public interface ICopy {
public <A,B extends List<A>> A method2(A a, B b);
}
Run Code Online (Sandbox Code Playgroud)
它使用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);
^
Run Code Online (Sandbox Code Playgroud)
我需要的只是一些想法如何改变method2它的编译实现.我甚至不关心编译器警告......
Mat*_*nry 11
我会尝试显式指定边界,如下所示:
return this.<A,B,Map<A,B>>method(a,b);
Run Code Online (Sandbox Code Playgroud)
但是,更一般地说,我根本不需要类型参数C.没有任何method参数或它的返回类型引用C,所以如果你可以改变签名method,我只会完全省略该类型参数.
| 归档时间: |
|
| 查看次数: |
4837 次 |
| 最近记录: |