无法将java值用作scala函数上java注释的参数
我在myApp包中有3个java文件:HW.java、myAnn.java和Constants.java Constants.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 {
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中修复了。