gpt4 book ai didi

java - 为什么 "(F obj)"中的F替换为Factory时会出现类型不匹配的错误。编译时F是什么

转载 作者:太空宇宙 更新时间:2023-11-04 14:22:29 24 4
gpt4 key购买 nike

为什么将“(F obj)”中的F替换为Factory时会出现类型不匹配错误。编译时的 F 是什么,是 Object 还是编译时的 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());
}

}

最佳答案

语句 x = obj.create(); 出现编译错误.

这是因为Factoryraw type :

The reference type that is formed by taking the name of a generic type declaration without an accompanying type argument list.

原始类型是 erasure其参数化类型。

类型变量的删除(如 T )is its left-most bound :

If no bound is declared for a type variable, Object is assumed.

因此,方法create原始类型 Factory返回Object .

我们不知道什么T在里面FirstClass<T> ,所以我们不知道是否 Object可以分配给它。

另请参阅:

关于java - 为什么 "(F obj)"中的F替换为Factory时会出现类型不匹配的错误。编译时F是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27032485/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com