4

パッケージmyAppには、HW.java、myAnn.java、Constants.javaの3つのJavaファイルがあります。

Constants.java:

public final class Constants {
    public static final String WORLD ="World";
}

myAnn.java:

public @interface myAnn {
    java.lang.String name() default "";
}

HW.java:

class HW {
    @myAnn(name = Constants.WORLD)
    public static void main(String[] args){
        System.out.println("Hi "+ Constants.WORLD);
    }
}

私のアプリは上記のようにコンパイルされて正常に実行されますが、HW.javaをHelloWorld.scalaとしてscalaに移行したいと思います。

object HelloWorld {
  @myAnn(name = Constants.WORLD)
  def main(args: Array[String]) {
    println("Hello " + Constants.WORLD)
  }
}

これをコンパイルしようとすると、

エラー:注釈引数は定数である必要があります。見つかった:Constants.WORLD @myAnn(name = Constants.WORLD)

アノテーションを削除すると、HelloWorldは期待どおりにコンパイルおよび実行されます。

Constants.WORLDをJavaプログラムからのアノテーションへのパラメーターとして使用できるのに、scalaプログラムからは使用できないのはなぜですか?Constants.javaで変更して、Javaまたはscalaから使用できるようにするものはありますか?MyAnn.javaを変更できず、Constants.javaをまだ移行できません。

4

1 に答える 1

2

これは、Java ソース ファイルを scala コンパイラにフィードするときにのみ現れるバグです。issue SI-2764を参照してください。この例は、最初に を使用して Java ファイルをコンパイルしjavac、次にscalacのクラスパスを生成されたクラスファイルにポイントするときに機能します。

于 2011-08-02T07:44:46.360 に答える