当您采用流畅的方法时,您可能会遇到以下情况:
流畅接口的优点在于您可以链接方法调用,但是尽管Bar继承了someMethod(),返回类型是Foo而不是Bar,这将打破以下链接:
一个答案是为每个继承的方法添加@Overrides,这样Bar就有了额外的方法:
在大型类和扩展的类层次结构中,这可能会造成冗余混乱。有没有适当的返回类型可以给流畅方法,使得继承它的每个类都会返回其特定类型的对象(以便我们可以在不使用转换的情况下链接方法)?
我尝试过:
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;
}
很遗憾,目前还没有有效的解决方案。我希望有人能提供一个简单而优雅的解决方案。由于项目较大,因此需要尽可能地易于维护和扩展。
非常感谢您提供的任何帮助。