11
package org.my.java;

public class TestTypeVariable {

    static <T,A extends T> void typeVarType(T t, A a){
        System.out.println(a.getClass());
        System.out.println(t.getClass());
    }

    public static void main(String[] s){
        int i= 1;
        typeVarType("string", i);
    }
}

运行时,以下是输出:

class java.lang.Integer
class java.lang.String

当它已经有上限时,怎么可能A是 type ?IntegerString

请解释一下。

4

1 回答 1

15

这里有两件事:

  • 对于“坏”类型有一个简单的解决方案: T 不是 String 而是Object整数扩展了对象。但请注意:这只适用于 Java8 的“增强型”类型推断功能。使用 Java7,您的输入将无法编译!
  • 你的误解:getClass()发生在运行时,因此返回传递的对象的特定类 - 独立于编译器在编译时对泛型的看法。
于 2017-09-25T08:18:54.030 回答