Lombok0.11.6を使ってます。
eclipseのJUnitランナーから実行した場合は大丈夫なのに、mvn test で実行すると失敗しました。
コンソールには以下のようなメッセージが。
[ERROR] Failure executing javac, but could not parse the error: [ERROR] エラー: deepToStringに適切なメソッドが見つかりません(int[]) [ERROR] メソッド Arrays.deepToString(Object[],StringBuilder,Set<Object[]>)は使用できません [ERROR] (実引数リストと仮引数リストの長さが異なります) [ERROR] メソッド Arrays.deepToString(Object[])は使用できません [ERROR] (実引数int[]はメソッド呼出変換によってObject[]に変換できません)
どうやらクラスのフィールドにオブジェクトの配列があって、そいつのGetterがプリミティブ型の配列を返すようになってると、発生しまう。
@ToString public class Sample { private String[] numbers; private int[] getNumbers() { ・・・ } }
まあこういうシーンに出くわすことはほとんどないと思いますが、以下のようなことをしてやれば解決します。
- getterの返り値の型をList
かInteger[]のようにオブジェクトの配列とする - ToStringアノテーションの引数に、doNotUseGetters=true を指定する
LombokのtoStringは、フィールドに対応するgetterがある場合は、フィールド参照ではなくgetterを優先して使います。
doNotUseGetters=true を指定することで、getterではなく直接フィールドを参照するようになるため、エラーが発生しなくなります。
何故eclipseから実行した場合は大丈夫で、mvn test だと失敗するかは、未調査・・・。
Lombokのドキュメントはこちら。