2017-03-01 4 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

私は同意しません。フィールドに注釈を付けるだけで(コンストラクタインジェクションのために何もしません)、ロンボクに生成されたコンストラクタの引数リストにそれを移すことができます。 – 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; 
} 

またはあなたはおそらく、すべての@Named注釈は、コンストラクタに移動することにしたいと、それはlombok.configを使用して制御することができようになります。

私は恐れています。あなたがそれを望むなら、あなた自身でそれをやらなければなりません(私の不完全な実装は少し助けになるかもしれません)。

FTR:feature requestがあります。

関連する問題