这个问题在这里已经有答案了:
为什么这个泛型java方法接受两个不同类型的对象(4个答案)
java泛型方法不工作-参数不受限制[重复](2个答案)
4个月前关门了。
class Test {
public static <T> boolean test(T a, T b) {
return a.equals(b);
}
public static void main(String[] args) {
int i = 0;
long j = 0;
if (!test(i, j)) {
throw new RuntimeException("i is not equal to j");
}
}
}
在上面的代码片段中,我预期会发生以下两种情况之一:
将出现编译器错误,因为 i
自动装箱到 Integer
以及 j
自动装箱到 Long
以及方法声明 test
要求其两个参数的类型相同。
两者 i
以及 j
自动装箱到long,编译和运行的代码显示 i
以及 j
我们是平等的。
但实际上发生的是 i
自动装箱到 Integer
以及 j
自动装箱到 Long
代码编译没有错误。这难道不符合 test
? 为什么允许这样的代码?
1条答案
按热度按时间tjrkku2a1#
如果
i
被装在箱子里Integer
以及j
被装在箱子里Long
,调用该方法仍然是合法的test
其泛型类型假定为java.lang.Number
,这是两者的超类型Integer
以及Long
.事实上,你可以打电话给你的朋友
test
方法,因为T
可以作为基本类型Object
. 方法上的泛型根本不限制其参数。