zaz*_*azi 9 java generics inheritance self-reference
描述可能有点困难.但是,我会试试;)
遵循流畅的样式,类的方法通常返回类实例本身(this).
public class A {
public A doSomething() {
// do something here
return this;
}
}
Run Code Online (Sandbox Code Playgroud)
当扩展这样一个流畅的样式类时,可以通过泛型类型在第一个继承步骤中相当容易地执行此操作,并将返回类型转换为超类中的此泛型类型.
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
}
Run Code Online (Sandbox Code Playgroud)
但是,当在这个扩展类上做另一个继承步骤时,我在尝试定义方法的泛型返回类型(在上层类中)和类描述本身时遇到了麻烦,例如,超级超级中的方法class不会返回extend类的类型,而是返回超类的类型.但是,我的意图是这些流畅的样式方法应该总是返回当前类的类型(而不是上层类).
那么可以通过利用泛型来定义解决方案吗?
PS:我知道,一个简单的解决方法可能会覆盖扩展类中的所有这些方法并将它们转换为当前类型.但是,我对更优雅的解决方案感兴趣;)
小智 5
你可以尝试:
class A<T> { }
class B<T extends A<? super T>> extends A<T> { }
class C extends B<C> { }
Run Code Online (Sandbox Code Playgroud)