2016-08-19 1 views
12

ボイラープレートコードを取り除くプロジェクトロンボクの機能を本当に楽しんでいます。 私のシニアは、ロンボクが定型文を減らすためにリフレクションを使用しているように思っています。 私の質問は、プロジェクトロンボクを使用するために問題がありますか?ロンボクは性能を低下させることができますか?

答えて

19

ロンボクは、実行時に反射を使用しません。これは、コンパイラの内部にフックし、コンパイル時にクラスにコードを追加します。コンパイル時には、コンパイルが正常に行われます。

6

@chrylis回答は正確ですが、オブジェクトグラフ(@Dataおよび@ToString注釈)には注意してください。

@Data 
public class A { 
    private B b; 
} 

@Data 
public class B { 
    private A a; 
} 

ロンボクは無限の再帰を使ってtoStringを作成します。 のようなものを@ToString(exclude = {"a"})のクラスBに入れてください。

+3

右ですが、これはかなり正常です。 JavaとGuavaのコレクションは同じように動作し、 'Arrays.toString(Object)'も同様に動作します。すべての 'toString'実装を生成しないので、ロンボクができることはほとんどありません。 – maaartinus

+0

しかし、サンプルにはコレクションがありません。デフォルトのtoString結果は "[email protected]"のようになります。だから再帰はありません。さらに@Dataのlombokアノテーションは、メソッドhashCodeとequalsも非効率的に実装する可能性があります。 PS 私はロンボクに満足していますが、まだそれを使用することをお勧めします – sibnick

+0

いいえ、コレクションはありませんが、あなたは手書きの 'toString'でいくつかのオブジェクトを持つかもしれません。実装によっては、フィールドを除外するかどうかを指定する必要があります。 Lombokは 'ThreadLocal 'にすべての 'toString'呼び出しを記録することでそれを処理できますが、これはすべての呼び出しを遅くします。それは便利な機能かもしれませんが、誰もそれを求めませんでした。なぜ効率が悪い 'hashCode' /' equals'ですか?そのため、Javaはリストのような方法で配列を扱いますか? PS:私はロンボクにとても満足しています(私はそれをJava 8の機能よりも重視しています)。 – maaartinus

関連する問題