[英]Is it possible to auto complete a builder in Intellij?
例如,我有一個帶有5個參數的構建器的類,而不是我手動選擇參數並填充它們,有沒有辦法告訴Intellij這樣做:
MyClass myClass = MyClass.builder()
.param1()
.param2()
.param3()
.param4()
.param5()
.build();
然后我可以自己填寫參數。 確保我沒有錯過任何東西都很方便。
或者,我可以設置自動完成選項以按它們在課程中出現的順序排序嗎?
即使有這樣的插件,我相信它對你沒有幫助(因為你仍然需要手動點擊每個方法調用並提供參數),你絕對不應該使用IDE來保護你不要設置所有必需參數。
在這種情況下,您要么將所有強制參數放入構造函數中,要么在build
方法中提供驗證。 就像是
public MyClass build() {
if(param1 == null) {
// handle param1 null value
}
if(param2 == null) {
// etc
}
...
}
為了確保您不會錯過任何參數,您可以在構建器模式上使用特定的變體。 我稱之為“命名參數”:
public final class MyClassBuilder {
public static Param2 param1(String param1) {
return param2 -> param3 -> param4 -> param5 -> new MyClass(
param1, param2, param3, param4, param5
);
}
public interface Param2 {
Param3 param2(String value);
}
public interface Param3 {
Param4 param3(int value);
}
public interface Param4 {
Param5 param4(boolean value);
}
public interface Param5 {
MyClass param5(Object value);
}
}
用法如下:
MyClass m = MyClassBuilder.param1("1")
.param2("2")
.param3(3)
.param4(false)
.param5(new Object());
使用這種模式,編譯器(和任何IDE)將強制執行參數的順序,並調用所有參數,因為任何中間狀態都不會獲得結果。 它也不需要任何額外的build()方法,因為最后一個參數已經能夠返回結果。
這是一個更多的編碼,但我打算在我的項目中為它創建一個代碼生成器: https : //github.com/c0stra/fluent-api-generator
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.