在返回类型中使用泛型时,我无法扩展父类 ,如下例所示。如你所知,没有泛型,下面的例子将被正常编译,但它不会是类型安全的,因为它的类型应该是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