groovyはjavaとの互換性が高く、テストコードなどjavaよりも簡単に記述できる場合は、groovyで書くようにしています。
今回は、javaにはない多重継承をgroovyのtraitを使ってできるとのことで、プロダクトコードでgroovyを使いました。
そのときにjavaとの互換でハマったことを忘れないようにメモしておきます。
groovyでのsetter/getter
lombokの@Setter/@Getterを使っているjavaのクラスをgroovyにした場合、
下記のような状態のままだとgetter/setterが効いてくれません。
class Sample {
@Getter
@Setter
private String value;
}
どうやらgroovyは標準でsetterやgetterの機能が使えるようなので、lombokを使う必要はないようです。
なのでsetter/getterのアノテーションを削除しましたが、それでも効きません。
修飾子を def にすると効くようになりました。
privateのままだとgroovyだと認識してくれないのかもしれないです。
class Sample {
def String value;
}
javaからgroovyのクラスを呼ぶ場合
最初にjavaコンパイラが実行されるとgroovyのクラスを認識できないため、参照先のgroovy側のパッケージやクラス名を解決出来ずエラーになるみたいです。
下記を参考にして解決する必要があります。
Gradle で Java から Groovy なクラスを参照する時の設定 - お だ のスペース
Groovy/Gradle/Mixing Java and Groovy - Glamenv-Septzen.net