java为什么接口没有一种方法要求实现类引用它们自己的类型?
像Comparable<>
这样的接口使用泛型来确定类的可比类型。在某些情况下,将一个类与另一个类(如^{A.get()
的类型应该总是A
我最初强迫自我参照的尝试是这样的:
interface Property<T extends Property<T>> {
public T get();
}
这允许
class A implements Property<A> {
public A get() { ... }
}
同时防止
class A implements Property<B> {
public B get() { ... }
}
不幸的是,它允许编译以下内容:
class A implements Property<A> {
public A get() { ... }
}
class B implements Property<A> {
public A get() { ... }
}
有办法做到这一点吗
# 1 楼答案
不,无法强制子类基于Curiously Recurring Template Pattern的泛型类型参数缩小继承方法上的返回类型。您不能强制
B
让get()
返回B
。这是一个面向对象的原则,子类可以继承一个方法,而不需要对其进行任何更改有时我希望这个功能是一个通用的“自我关系”类型。下面是我如何理解语法的。关键字“this”将表示这种类型
A
在A
,B
在B
中但是强制
B
覆盖getA()
违背了面向对象的原则。子类应该可以自由地从超类继承方法