Java 我可以从生成器获得匿名类吗?
我知道我可以在手动创建匿名类的实例时创建匿名类,如下所示:Java 我可以从生成器获得匿名类吗?,java,builder-pattern,Java,Builder Pattern,我知道我可以在手动创建匿名类的实例时创建匿名类,如下所示: ClassName c = new ClassName() { public void overridenMethod() { method body } } 但是,有些类使用生成器模式创建新实例。我的问题是,是否有一个技巧允许我使用其超类提供的生成器创建匿名类。否,或者至少不直接创建:在Java中,不能从实例继承;您需要从类继承 但是,您可以构建一个匿名类,该类包装从生成器返回的实例。您可以根据需要调用包装实例上的方法,同时
ClassName c = new ClassName() {
public void overridenMethod() { method body }
}
但是,有些类使用生成器模式创建新实例。我的问题是,是否有一个技巧允许我使用其超类提供的生成器创建匿名类。否,或者至少不直接创建:在Java中,不能从实例继承;您需要从类继承 但是,您可以构建一个匿名类,该类包装从生成器返回的实例。您可以根据需要调用包装实例上的方法,同时覆盖需要覆盖的方法
final ClassName wrapped = builder.buildClassName();
ClassName c = new ClassName() {
public void passedThroughMethod1() { wrapped.passedThroughMethod1() }
public void overridenMethod() { method body }
public void passedThroughMethod2() { wrapped.passedThroughMethod2() }
};
此时,
c
的行为与wrapped
实例类似,除了覆盖方法
。一个不幸的结果是,您无法访问包装的的受保护成员。如果我没有弄错,您希望构建器返回匿名类型的实例。如果是这种情况,我将在基类中添加一个create
方法,构建器将调用该方法来创建新实例。在中,派生类重写create
,以返回匿名类的实例。这假设构建器可以访问基类的实例。另一种机制是向建筑商提供供应商
也许我误解了这个问题,但您可以返回匿名类的实例,只要该非类实现/扩展了指定为ResultType builder.build()返回类型的类型。
。我不确定是否理解您的意思。你建议我修改生成器吗?我不能。我在寻找类似于上面代码片段的东西。比如builder.build(){overrideMethod(){methodbody}
。我认为构建器模式可能是标准构造函数的完全替代品,但显然不是这样。啊,现在明白了。在这种情况下,dasblinkenlight的答案是正确的。