下列類型不產生任何編譯器警告:泛型類型參數給出了錯誤,但通配符類型參數不
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