我寫了一個建設者設置一些配置。建造者的方法之一是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。我以爲我嘗試過,但我認爲它是與'功能'所以我得到了編譯器錯誤 –