想象一下,我们有以下泛型类:
public class GenericClass {
private U value;
public GenericClass(U value) {
this.value = value;
}
}
和其他一些类MyClass中的以下泛型方法:
public void genericMethod(T arg) {
Object genericClass = new GenericClass(arg);
}
如果我们打电话,BT类型参数将获得哪个值
genericMethod("text");
?
一些说明:
上面的代码编译没有错误或警告,这对我来说似乎很奇怪.
反编译(通过IntelliJ IDEA 2016)显示以下代码:
public void genericMethod(T arg) {
new MyClass.GenericClass(arg);
}
请注意,新的GenericClass< BT>(arg)与新的GenericClass(arg)不同,因为后者等同于新的GenericClass< T>(arg)(类型推导),虽然T扩展了BT,但它们是不同的类型,和GenericClass可能有内部逻辑,其中确切的类型名称起着重要作用(例如,在某些地图中用作字符串键等).所以对我来说奇怪的是,为什么编译器静默使用类型推导而不是产生一些警告(或者甚至是错误),指出没有指定BT类型参数.也许我错过了什么.关于Java中泛型的重要性,但……