groovyとjavaの互換でハマったことメモ

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