作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一些 X
类,其中包含 A
字段。它是一个最终字段,在构造函数中初始化。现在我有一个派生类 Y
,其中该字段必须始终是 B
的实例,该类派生自 A
。问题是,类 Y
需要调用一些特定方法,这些方法仅在类 B 上可用,但在其祖先 A
上不可用。
我看到了几种解决方案:
X
的A
类型的字段,在Y
类内部,强制转换A
到 B
。这使我的代码充满了讨厌的类型转换。B
类型的字段。现在没有类型转换,但我们有两个类型略有不同的字段,它们必须始终保持相同的值 - 感觉也不太好。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/
我是一名优秀的程序员,十分优秀!