无法将java值用作scala函数上java注释的参数

无法将java值用作scala函数上java注释的参数,scala,annotations,cross-language,Scala,Annotations,Cross Language,我在myApp包中有3个java文件:HW.java、myAnn.java和Constants.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 {

我在myApp包中有3个java文件:HW.java、myAnn.java和Constants.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迁移到scala HelloWorld.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。

这是一个只在将java源文件提供给scala编译器时才会出现的错误,请参阅问题。当首先使用
javac
编译java文件,然后将
scalac
的类路径指向生成的类文件时,该示例会起作用。

您使用的是什么Scala版本?我有Scala 2.9.0.1 final,所有的东西都可以编译和运行。顺便说一句,将注释与代码的其余部分分开编译可能是一个很好的建议…我正在使用2.8.1.final-我将尝试更新。刚刚尝试了2.9.0.1,同样的错误:scalac-版本Scala编译器版本2.9.0.1-版权所有2002-2011,LAMP/EPFL scalac*HelloWorld。Scala:4:错误:注释参数需要是常量;发现:Constants.WORLD@myAnn(name=Constants.WORLD)这个bug现在说它已经在Scala 2.10中修复了。