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

时间:2017-06-21 07:29:43

标签: java static

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

e.g:

public class TypeClass{
    public static <U> U get(U arg0){
        return arg0;
    }
}

主:

String str1 = TypeClass.get("dummy");

U在什么时候宣布?

3 个答案:

答案 0 :(得分:0)

泛型在运行时无法使用。在编译时类型系统中,存在类型参数,并用于类型检查。在运行时类型系统中,缺少类型参数,因此不会检查。

答案 1 :(得分:0)

请注意: generics (几乎)只有编译时间

编译器出现了:

String str1 = TypeClass.get("dummy");

并发现您正在调用使用类型参数的静态方法。然后它的类型推断算法踢 - 并发现你传入一个字符串;以便UString。在运行时,无论如何都是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>的时候。编译器推断出满足边界的类型,并在调用站点插入必要的强制转换