[英]Generic method works with different actual parameter
这里我有一个接受泛型类型参数T
的泛型方法
public static <T> boolean compare(T p1, T p2) {
return p1.equals(p2);
}
现在,如果我像下面这样调用这个方法
compare(10, "");
它工作,但我认为它不应该工作,因为它只能接受一种类型的Type parameter
,那么推理算法如何在这里工作?
它的工作原理是因为Integer和String有共同的父对象,你没有在类型T中指定任何约束。如果你写:
public static <T extends Number> boolean compare(T p1, T p2) {
return p1.equals(p2);
}
你得到编译时错误。
方法调用有效,因为您没有约束类型T
,因为String
和Integer
都是java.lang.Object
子类型,它们是将被推断的类型。
您的方法将编译,而不是在运行时抛出任何异常。
原因是:
T extends CharSequence
等),所以任何Object
和“boxable”原语将在调用期间编译为参数 equals
等于调用Object#equals
,因此不会抛出运行时异常。 false
将返回,因为参数之间的引用不相等 如果使用共享相同引用的对象调用方法,则它将打印为true
。
如果使用共享相同值的对象调用方法(例如两个相等的String
),它将返回true
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.