当您采用流利的方法时,您可能会遇到以下情况:
public class Foo<T extends a>{
public Foo<T> someMethod(){
System.out.println("foo");
return this;
}
}
public class Bar<T extends b> extends Foo<T> {
public Bar<T> barMethod(){
System.out.println("bar");
return this;
}
}
public class a{}
public class b extends a{}
流畅接口的优点是您可以链接方法调用,但是虽然 Bar 继承了 someMethod(),但返回类型是 Foo 而不是 Bar,这会破坏以下链:
new Bar<b>().someMethod().barMethod();
一个答案可能是为每个继承的方法添加@Overrides,这样 Bar 就有了额外的方法:
@Override
public Bar<T> someMethod(){
System.out.println("foo");
return this;
}
但是在大类和扩展类层次结构中,这肯定会证明是一团糟?!是否有适当的返回类型赋予流利的方法,从而每个继承它的类都将返回其特定类型的对象(这样我们就可以在没有强制转换的情况下链接方法)?
我试过:
public <U extends Foo<T>> U someMethod(){
System.out.println("foo");
return this;
}
唉,无济于事。我希望有人知道这个问题的简单而优雅的解决方案。该项目很大,因此如果可能,它需要可维护和可扩展。
感谢您在这种情况下提供的任何帮助。