我写了一个建设者设置一些配置。建造者的方法之一是edit(BusinessObject)
。现在我得到了导致相同配置的要求,除了将此方法替换为copy(BusinessObject)
。所以,当前的实现将是:消费者或功能建设者
public Config editObject(BusinessObject object) {
return new ConfigBuilder()
.config1(p1)
.config2(p2)
.config3(p3)
...
.edit(object)
.build();
}
public Config copyObject(BusinessObject object) {
return new ConfigBuilder()
.config1(p1)
.config2(p2)
.config3(p3)
...
.copy(object)
.build();
}
class ConfigBuilder {
ConfigBuilder edit(BusinessObject o) {
// prepare some settings
return this;
}
ConfigBuilder copy(BusinessObject o) {
// prepare some other settings
return this;
}
}
为了避免重复的代码(除这一行一切是一样的),我想它像Function<BusinessObject, ConfigBuilder> prepare
附加参数提取到一个新的方法。
但我坚持如何解决它。构建器实例将在editObject
/copyObject
的作用域之外创建,因此editOrCopy(object, ConfigBuilder::copy)
不起作用,因为此方法不是静态的。
任何想法?
“静态”方法已过时。试试用'ConfigBuilder :: edit'替换'ConfigBuilder :: editStatic'时发生的情况,用'ConfigBuilder :: copy'替换'ConfigBuilder :: copyStatic'。另请参见[Java 8中实例方法引用类型之间的区别是什么?](https://stackoverflow.com/q/22516331/2711488)... – Holger
Thanks @Holger。我以为我尝试过,但我认为它是与'功能'所以我得到了编译器错误 –