为什么Java模板约束在返回语句中将受约束类型限制为扩展类型?
我有这样的代码:为什么Java模板约束在返回语句中将受约束类型限制为扩展类型?,java,Java,我有这样的代码: public class Something<T extends Thing> { private T theThing; public Something(T aThing) { theThing = aThing; } public T getTheThing() { return theThing; } } 特殊训练班: public abstract class Thing {
public class Something<T extends Thing> {
private T theThing;
public Something(T aThing) {
theThing = aThing;
}
public T getTheThing() {
return theThing;
}
}
特殊训练班:
public abstract class Thing {
}
public class SpecialThing extends Thing {
}
原因是您使用的是对
某物的原始类型引用。这意味着Java唯一可以确定的是返回的类型扩展了thing
,因此这就是您得到的类型
添加如下类型参数以返回一个SpecialThing
:
Something<SpecialThing> something = new Something<SpecialThing>(new SpecialThing());
SpecialThing specialThing = something.getTheThing();
Something=newsomething(newspecialthing());
SpecialThing SpecialThing=something.getTheThing();
因为您没有在变量声明中指定类型。您可能已经用SpecialThing
对其进行了实例化,但这不是您记忆它的方式
您会注意到,当您使用此选项时,它会起作用
Something<SpecialThing> something = new Something<SpecialThing>(new SpecialThing());
Something=newsomething(newspecialthing());
这与定义ArrayList t=new ArrayList()相同代码>。这仍将被视为ArrayList
,而不是ArrayList
.提供物品和特殊类别代码。
Something<SpecialThing> something = new Something<SpecialThing>(new SpecialThing());