当我在静态方法中使用类型边界时确定何时是类型参数?
e.g:
public class TypeClass{
public static <U> U get(U arg0){
return arg0;
}
}
主:
String str1 = TypeClass.get("dummy");
U在什么时候宣布?
答案 0 :(得分:0)
泛型在运行时无法使用。在编译时类型系统中,存在类型参数,并用于类型检查。在运行时类型系统中,缺少类型参数,因此不会检查。
答案 1 :(得分:0)
请注意: generics (几乎)只有编译时间。
编译器出现了:
String str1 = TypeClass.get("dummy");
并发现您正在调用使用类型参数的静态方法。然后它的类型推断算法踢 - 并发现你传入一个字符串;以便U
为String
。在运行时,无论如何都是Object
。
这就是全部。
答案 2 :(得分:0)
此代码:
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");
类型变量的唯一方式是&#34;声明&#34;是你写<U>
的时候。编译器推断出满足边界的类型,并在调用站点插入必要的强制转换。