gpt4 book ai didi

java - 在 Java 中覆盖具有通用返回类型的方法

转载 作者:行者123 更新时间:2023-11-29 08:12:06 25 4
gpt4 key购买 nike

在返回类型中使用泛型时,我无法扩展父类像下面的例子。

如您所知,如果没有泛型,下面的示例将正常编译,但它不是类型安全的,因为它的类型应该是 Object。

有没有我可以引用的明确解决方案(或模式,或建议,任何东西都会有帮助!)?

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 .您混淆了继承和组合。

StringReader继承自 ByteArrayReader你是说它会履行一份契约(Contract),说它有一个 readNext返回 byte[] 的方法.

你真正想做的是使用组合而不是继承:

class StringReader extends AbstractReader<String> {
private AbstractReader<byte[]> downstream;

public StringReader(AbstractReader<byte[]> downstream) {
this.downstream = downstream;
}

public String readNext() {
return new String(downstream.readNext());
}
}

StringReader满足 AbstractReader<String>契约(Contract),并在下游方面实现AbstractReader<byte[]> .请注意,它没有明确要求 ByteArrayReader - 任何旧的AbstractReader<byte[]>将工作。

关于java - 在 Java 中覆盖具有通用返回类型的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7577587/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com