这里我有一个泛型方法,它接受泛型类型参数T
public static <T> boolean compare(T p1, T p2) {
return p1.equals(p2);
}
现在,如果我像下面这样调用这个方法
compare(10, "");
它可以工作,但我假设它不应该工作,因为它只能接受一种类型的Type parameter
,那么推理算法是如何工作的呢?
发布于 2015-08-17 12:07:23
它之所以有效,是因为Integer和String具有共同的parent: Object,并且您没有在类型T中指定任何约束。如果您编写:
public static <T extends Number> boolean compare(T p1, T p2) {
return p1.equals(p2);
}
你会得到编译时错误。
发布于 2015-08-17 12:07:58
该方法调用之所以有效,是因为您没有约束类型T
,而且由于String
和Integer
都是java.lang.Object
的子类型,因此将推断出该类型。
发布于 2015-08-17 12:07:14
您的方法将进行编译,并且在运行时不会抛出任何异常。
原因是:
由于参数之间的引用不等于,因此将返回false
如果您使用共享相同引用的对象调用您的方法,它将打印true
。
如果您使用共享相同值的对象(例如,两个相等的String
)调用您的方法,它将返回true
。
https://stackoverflow.com/questions/32049849
复制相似问题