下列类型不产生任何编译器警告:泛型类型参数给出了错误,但通配符类型参数不
public abstract Class<? extends BaseType> getSubclassType();
@Override
public Class<SubType> getSubclassType() {
return SubType.class;
}
下面的具体方法产生一个unchecked投编译器警告:
public abstract <T extends BaseType> Class<T> getSubclassType();
@Override
public <T extends BaseType> Class<T> getSubclassType() {
return (Class<T>) SubType.class;
}
有没有办法用泛型类型参数(在基类中)定义方法,并在子类中返回适当的具体类型而不生成编译器警告?很明显,我上面给出的两个例子都可以正常工作,我只想知道是否有更正确的方法来定义方法。注:我知道我可以做到以下几点:
public abstract class BaseClass <T extends BaseType>
public abstract Class<T> getSubclassType();
我想知道如果有一种方法来定义方法头本身,具有泛型类型,而不定义它的类。而且,我很好奇为什么通配符声明不给与警告,而是“等价的”泛型声明。
在通配符示例中,“SubType.class”必须是“类”类型。然而,在泛型中,程序没有办法隐式知道“SubType.class”是否真的扩展了'BaseType',所以它会给出警告。至于避免这种情况的方法,我想不出来。 –
Mat