可能有点难以描述,但我会尝试一下 ;)
按照流畅的风格,一个类的方法通常返回类实例本身(this)。
public class A {
public A doSomething() {
// do something here
return this;
}
}
当扩展这样一个流畅风格的类时,可以通过在第一次继承步骤中使用通用类型,并在超类中将返回类型强制转换为此通用类型来轻松实现。
public class A<T extends A<T>> {
public T doSomething() {
// do something here
return (T) this;
}
}
public class B extends A<B> {
// an extended class of class A
}
然而,在对这个扩展类进行另一次继承时,我在尝试定义方法的泛型返回类型(在上层类)和类描述本身时遇到了麻烦,例如,超级-超级类中的方法将不会返回扩展类的类型,而是返回超级类的类型。然而,我的意图是这些流式风格的方法应始终返回当前类的类型(而不是其上层类的类型)。
那么,有没有可能通过利用泛型来定义解决方案呢?
PS: 我知道,一个简单的解决方法可能是在扩展类中覆盖所有这些方法并将它们强制转换为当前类型。但是,我对更优雅的解决方案很感兴趣 ;)