在静态方法中使用类型边界时,何时确定类型参数?
例如:
public class TypeClass{
public static <U> U get(U arg0){
return arg0;
}
}
主要:
String str1 = TypeClass.get("dummy");
U 在什么时候声明?
泛
型在运行时不可用。在编译时类型系统中,存在类型参数,并用于类型检查。在运行时类型系统中,类型参数不存在,因此不被选中。
请记住:泛型(几乎(只与编译时有关。
编译器遇到:
String str1 = TypeClass.get("dummy");
并发现您正在调用使用类型参数的静态方法。然后它的类型推断算法启动 - 并发现你传入了一个字符串;这样U
就会String
.在运行时,无论如何,一切都Object
。
这就是全部内容。
此代码:
public class TypeClass{
public static <U> U get(U arg0){
return arg0;
}
}
String str1 = TypeClass.get("dummy");
编译时变为:
public class TypeClass{
public static Object get(Object arg0){
return arg0;
}
}
String str1 = (String) TypeClass.get("dummy");
"声明"类型变量的唯一方法是编写<U>
。编译器推断满足边界的类型,并在调用站点插入必要的强制转换。