这可能很难描述。但是,我会尝试的;)
遵循流利的风格,类的方法通常返回类实例本身(此)。
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:我知道,一个简单的解决方法可能是覆盖扩展类中的所有这些方法,并将其强制转换为当前类型。但是,我对更优雅的解决方案感兴趣;)
您可以尝试:
class A<T> { }
class B<T extends A<? super T>> extends A<T> { }
class C extends B<C> { }
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句