当我在静态方法中使用类型边界时,何时确定类型参数



在静态方法中使用类型边界时,何时确定类型参数?

例如:

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> 。编译器推断满足边界的类型,并在调用站点插入必要的强制转换。

最新更新