使用静态方法的泛型

时间:2014-08-05 16:49:57

标签: java generics

如果没有任何Exceptoin,这是如何工作的?因为在这种情况下T必须相同,但一个是String而另一个是ArrayList<Integer>

public static void main(String[] args) {
    Serializable s = pick("d", new ArrayList<Integer>());   
    System.out.println("s:"+s);
}
static <T> T pick(T a1, T a2) {
    return a2;
}

2 个答案:

答案 0 :(得分:7)

编译器使用类型推断来确定T的类型。它选择适用于所有类型的最具体类型。此处,s的类型为Serializable,您传递了StringArrayList<Integer>StringArrayList都是Serializable,没有其他关系,因此T的推断类型为Serializable

答案 1 :(得分:1)

由于您返回类型为T的对象并将其存储到Serializable类型的变量中,我猜编译器会在您的调用中推断出T是Serializable,因此String和ArrayList都有资格作为pick的参数。< / p>