読者です 読者をやめる 読者になる 読者になる

LombokのToStringアノテーション使うとmvn test で失敗したよ

Java

Lombok0.11.6を使ってます。
eclipseJUnitランナーから実行した場合は大丈夫なのに、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のドキュメントはこちら