【发布时间】:2011-03-01 07:41:51
【问题描述】:
以下代码用 Eclipse 可以完美编译,但是用 javac 编译失败:
public class HowBizarre {
public static <P extends Number, T extends P> void doIt(P value) {
}
public static void main(String[] args) {
doIt(null);
}
}
我简化了代码,所以现在根本不用 T。不过,我看不出错误的原因。 由于某种原因,javac 决定 T 代表 Object,然后抱怨 Object 不符合 T 的边界(这是真的):
HowBizarre.java:6:不兼容的类型;推断类型参数 java.lang.Number,java.lang.Object 不符合类型的界限 变量 (s) P,T
找到:
<P,T>void必填:无效
doIt(null); ^
请注意,如果我将 null 参数替换为非 null 值,则编译正常。
哪些编译器行为正确,为什么?这是其中之一的错误吗?
【问题讨论】:
标签: java eclipse generics null compilation