我今天意识到这个编译运行正常:
public class Test {
public static <T> T handle(T val) {
System.out.println("T");
return val;
}
public static <T extends String> T handle(T val) {
System.out.println("T extends String");
return val;
}
}
他们俩 handle
方法具有相同的名称,相同的数字和类型(?
)参数。唯一的区别是第二个 handle
方法具有更严格的通用绑定。 IDE根本没有抱怨,代码编译得很好。在运行时方法按预期选择 - 例如 Test.handle("this is a string")
将调用第二种方法和 Test.handle(10)
将调用第一个。
泛型绑定被认为是方法签名的一部分吗?或者它是一种方法重载决议魔术?