在返回類型中使用泛型時,我無法擴展父類 ,如下例所示。如你所知,沒有泛型,下面的例子將被正常編譯,但它不會是類型安全的,因爲它的類型應該是Object。在Java中使用泛型返回類型的覆蓋方法
是否有任何明確的解決方案(或模式,或建議,任何有用的東西!),我可以參考?
class AbstractReader<T>{
public abstract T readNext();
}
class ByteArrayReader extends AbstractReader<byte[]>{
@Override
public byte[] readNext(){ /*...*/ }
}
class StringReader extends ByteArrayReader {
@Override
public String readNext() {
/* The return type is incompatible
with ByteArrayReader.readNext()! */
return new String(bytes);
}
}
感謝您的意見。我也認爲在這種情況下使用構圖是最好的。但是,如果StringReader和ByteArrayReader共享許多方法,Decorator將具有如下重複代碼: 'ReturnType someMethod(Arg args){byteArray.someMethod(); }' 這是不可避免的嗎? – nephilim
是的,它可能會導致重複的代碼,但也會導致更清晰的實現! – claymore1977