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
已经上限为String
时,它怎么能属于Integer
类型?
请解释一下。
这里有两件事:
- 对于"错误"类型有一个简单的解决方案:T 不是字符串而是对象。和整数扩展对象。但请注意:这仅适用于 Java8 的"增强"类型推理功能。使用 Java7,您的输入将无法编译!
- 您的误解:
getClass()
发生在运行时,因此返回传递的对象的特定类 - 独立于编译器在编译时对泛型的看法。