gpt4 book ai didi

java - 派生类中的继承字段 - 两种解决方案都显得蹩脚

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:57:50 31 4
gpt4 key购买 nike

我有一些 X 类,其中包含 A 字段。它是一个最终字段,在构造函数中初始化。现在我有一个派生类 Y,其中该字段必须始终是 B 的实例,该类派生自 A。问题是,类 Y 需要调用一些特定方法,这些方法仅在类 B 上可用,但在其祖先 A 上不可用。

我看到了几种解决方案:

  1. 重用继承自XA类型的字段,在Y类内部,强制转换AB。这使我的代码充满了讨厌的类型转换。
  2. 添加另一个B 类型的字段。现在没有类型转换,但我们有两个类型略有不同的字段,它们必须始终保持相同的值 - 感觉也不太好。
  3. B提供的所有方法也添加到A,抛出NotImplementedException。这会添加一些奇怪的方法,这些方法在该类中故意没有意义。

处理这个领域最正确的方法是什么?或者也许还有其他更好的存在?我不认为这是非常特定于语言的,但必须在我使用的 Java 中可行。

最佳答案

X 类型可能应该是泛型类型:

public class X<T extends A> {

protected T a;

public X(T a) {
this.a = a;
}
}

public clas Y extends X<B> {

public Y(B b) {
super(b);
}

public void foo() {
// here, this.a is of type B, without any type cast.
}
}

关于java - 派生类中的继承字段 - 两种解决方案都显得蹩脚,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14541112/

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