我的问题涉及方法链 + 继承不兼容?。 但不幸的是,所有方法链的示例/答案都只使用了单级继承。 我的用例涉及多级继承,例如
abstract class PetBuilder{...}
class DogBuilder extends PetBuilder{..}
class DogType1Builder extends DogBuilder {...}
构建一个Dog对象,我将使用DogBuilder或DogType1Builder。
如何针对上述用例使用getThis技巧?
我想使用构建器模式来构建一个复杂的Dog对象(Dog对象模型)。DogType1将有一些额外的属性。
因此,为了使用getThis Trick,上述类的声明将变成:
abstract class PetBuilder<T extends PetBuilder<T>>
class DogBuilder<T extends DogBuilder<T>> extends PetBuilder<DogBuilder<T>>
class DogType1Builder extends DogBuilder<DogType1Builder>
现在这样做会出现两个问题。
1. 'DogBuilder'中的构建器方法将如下所示。
public T someMethodInDog(String dogName) {
..
return (T)this; ///i dont want type casting and i cant use getThis Trick Here (compiler reports error for conversion from DogBuilder to T)
}
2.由于DogBuilder已经参数化,因此要创建“DogBuilder”的实例,我将不得不使用
DogBuilder<DogBuilder> builder=new DogBuilder(); //passing <DogBuilder> type ...real pain
有更好的方法吗?