Xin*_*hao 11 java generics overload-resolution
我今天意识到这个编译并运行良好:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
这两个handle方法具有相同的名称,并且?参数的数量和类型()相同.唯一的区别是第二种handle方法具有更严格的通用界限.IDE根本没有抱怨,代码编译得很好.在运行时方法按预期选择 - 例如,Test.handle("this is a string")将调用第二个方法Test.handle(10)并将调用第一个方法.
泛型绑定是否被认为是方法签名的一部分?或者它是一种方法重载决议魔术?
Jac*_* G. 12
泛型提供编译时类型安全性; 在运行时,您的方法将擦除以下内容:
public static Object handle(Object val) {
System.out.println("T");
return val;
}
public static String handle(String val) {
System.out.println("T extends String");
return val;
}
Run Code Online (Sandbox Code Playgroud)
由于方法重载,handle(String)将在传递时调用String,并handle(Object)在传递任何其他时将被调用Object(请记住String是最终的并且可以没有子节点).
| 归档时间: |
|
| 查看次数: |
109 次 |
| 最近记录: |