1. ホーム
  2. kotlin

[解決済み] KotlinはJava Lombokのアクセサーを見ない?

2023-06-23 14:02:40

質問

Kotlin 1.0.0 リリースを使用しています(IntelliJ 15 でコンパイルしています)。

println(myPojoInstance.foo)

LombokベースのPOJOを参照するコードを(IntelliJまたはGradleで)コンパイルしようとすると、エラー "Cannot access 'foo': it is 'private' in "MyPojo" が表示されます。これは本当です。これらはすべてプライベートであり、私のオブジェクトはlombokアノテーションの@Value @Builderを持っています。

私は具体的にgetFoo()を呼び出そうとしましたが、"unresolved reference for getFoo"と表示されました。おそらく、Kotlinがlombokアノテーションをどのように処理するかを認識させるための何らかのトリックがあるのでしょうか?

どのように解決するのですか?

一般的には、そうではありません。Lombokはjavacのアノテーション処理系ですが、kotlinコンパイラの実行時にはjavacも使用しますが、アノテーション処理は行わないため、kotlinではまだ生成されていない宣言が表示されないからです。

今のところ唯一の回避策は、厳密なコンパイル順序を定義することです。Javaが最初で、その後にkotlinをコンパイルします。残念ながら、この方法には大きな欠点があり、この場合、JavaからKotlinのコードを使用することができません。これを回避するために、マルチモジュールプロジェクトが必要になるかもしれませんが、それは多くの苦痛をもたらすかもしれません。