2017-03-01 78 views
5

龍目島在自動生成構造函數時忽略字段的註釋。有沒有辦法在構造函數輸入參數中保留字段的註解?龍目島 - 在構造函數輸入參數中保留字段註釋

類生成構造函數,

@RequiredArgsConstructor(onConstructor = @__(@Inject)) 
public class Test { 

    @Named("MyField") 
    private final String field; 
    @Named("MyHandler") 
    private final SomeHandler handler; 
} 

生成類:

public class Test { 

    @Named("MyField") 
    private final String field; 
    @Named("MyField") 
    private final SomeHandler handler; 

    @Inject 
    public Test(final String field, final SomeHandler handler) { 
     this.field = field; 
     this.handler = handler; 
    } 
} 

所需類:

public class Test { 

    @Named("MyField") 
    private final String field; 
    @Named("MyHandler") 
    private final SomeHandler handler; 

    @Inject 
    public Test(@Named("MyField")final String field, 
       @Named("MyHandler")final SomeHandler handler) { 
     this.field = field; 
     this.handler = handler; 
    } 

} 
+0

我不認爲這是按照實施:https://groups.google.com/forum/#!topic/project-lombok/2vaujDkV8Nw – Cheetah

+0

@Cheetah我很害怕,你說得對。幾年前我開始實施它,但比我想象的要複雜。沒有人在乎,我發現我自己很少需要它,並且有一個解決方法。 – maaartinus

回答

0

這將是比如果它只是編寫構造本身更詳細已經由龍目島實施。手動定義構造函數,或者在可能的情況下注釋字段。

+1

我不同意。它可以像註釋字段一樣簡單(單獨對構造函數注入沒有任何作用),並讓lombok將它移動到它生成的構造函數的參數列表中。 – maaartinus

4

有沒有這樣的功能,它看起來像沒人關心。我proposed it once並開始實施它,但放棄了(沒有需求和太多的工作)。

它可能看起來像

@RequiredArgsConstructor([email protected]__(@Inject)) 
public class Something { 
    @OnConstructor(@Named("userName")) 
    private final String userName; 

    @OnConstructor(@Named("userPassword")) 
    private final String userPassword; 

    private final int anotherField; 

    private final int yetAnotherField; 
} 

或者只是

@RequiredArgsConstructor(
    [email protected]__(@Inject), 
    [email protected]__(@Named)) 
public class Something { 
    @Named("userName") 
    private final String userName; 

    @Named("userPassword") 
    private final String userPassword; 

    private final int anotherField; 

    private final int yetAnotherField; 
} 

,或者它可以使用lombok.config被控制,你可能希望所有@Named註釋移動到構造函數。我很害怕,如果你想要它,那麼你必須自己做(我的不完整的實現可能會幫助你一點點)。

FTR:現在有feature request