【发布时间】:2012-06-21 17:20:41
【问题描述】:
这可能有点难以描述。不过,我会试试看;)
遵循流畅的风格,一个类的方法通常返回类实例本身(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
}
但是,当在这个扩展类上执行另一个继承步骤时,我在尝试定义方法的通用返回类型(在上层类中)和类描述本身时遇到了麻烦,例如,在super-super 类不会返回扩展类的类型,而是返回超类的类型。然而,我的意图是这些流畅风格的方法应该总是返回当前类的类型(而不是上层类)。
那么是否可以通过使用泛型来定义解决方案?
PS:我知道,一个简单的解决方法可能是覆盖扩展类中的所有这些方法并将它们转换为当前类型。但是,我对更优雅的解决方案感兴趣;)
【问题讨论】:
标签: java generics inheritance self-reference