【发布时间】:2012-03-28 03:50:16
【问题描述】:
我的问题是在Method chaining + inheritance don’t play well together? 的上下文中。 但不幸的是,方法链接的所有示例/答案都使用单级继承。 我的用例涉及多级继承,例如
abstract class PetBuilder{...}
class DogBuilder extends PetBuilder{..}
class DogType1Builder extends DogBuilder {...}
要构造一个 Dog 对象,我将使用 DogBuilder 或 DogType1Builder
如何在上述用例中使用 getThis 技巧?
我想用builder模式来构造一个复杂的Dog对象(Dog Object Model)”。 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>
现在这会产生两个问题
'DogBuilder' 中的 1.builder 方法看起来像
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
有没有更好的方法?
【问题讨论】:
-
你真的试过了吗?我看不出为什么同样的技巧不应该适用于多层次的继承。如果您有具体问题,请澄清并 - 最好 - 给出一个具体的代码示例。
-
我已经编辑了我的问题以澄清问题
标签: java generics inheritance method-chaining