Scala 3でJavaのアノテーション継承したclassが定義できない問題の対策

github.com

github.com

github.com

  • (詳細な経緯や、理由、今も本当に必要なのか?は、あまり知らないけれど) playframeworkでは javax.inject.Named を継承して play.inject.NamedImpl というclassをJava 定義している
    • 他にも同様のアノテーションが、いくつかあります
    • google guiceに依存しないで独自のinjectの実装提供したかったらしい?
  • JavaアノテーションJavaで継承しているだけで、なぜScalaが関係してくるのか、というと、おそらく以下の2つの観点

以下それぞれの解決方法の例

Scala 3側で「Javaのアノテーションを継承したclass」を、直接型として扱えるか?

  • 現状扱えない?ので、とりあえず、Scala側では親のアノテーションの型で扱えばよい
  • そのためだけに Java 以下のようなコードを書いて、Scalaから見えないようにする(見えた瞬間にScala 3 compilerが死ぬ?ので)
  public static Named named(String value) {
    return new play.inject.NamedImpl(value);
  }

JavaScalaのコードを混ぜて同時にコンパイルする機能