簡體   English   中英

是否可以在Intellij中自動完成構建器?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM