“F obj”中的F替换为Factory时引发java Why类型不匹配错误。编译时F是什么
“F obj”中的F替换为Factory时引发类型不匹配错误的原因。什么是编译时的F,是对象还是编译时的F
interface Factory<T>
{
T create();
}
class FirstClass<T>
{
T x;
<F extends Factory<T>> FirstClass(F obj)// Error will be thrown when F in (F obj)
// is replaced with Factory. Error will be
// cannot convert from "Object to T"
{
x = obj.create();
}
}
class integerFactory implements Factory<Integer>
{
@Override
public Integer create() {
return 1000;
}
}
public class testGenerics {
public static void main(String[] args) {
new FirstClass<Integer>(new integerFactory());
}
}
# 1 楼答案
编译错误是针对语句
x = obj.create();
这是因为
Factory
是一个raw type:原始类型是其参数化类型的erasure
类型变量(如
T
)is its left-most bound的擦除:因此,原始类型
Factory
的方法create
返回Object
我们不知道
T
中有什么FirstClass<T>
,所以我们不知道Object
是否可以分配给它另见: