我在包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 as
HelloWorld.scala:
object HelloWorld {
@myAnn(name = Constants.WORLD)
def main(args: Array[String]) {
println("Hello " + Constants.WORLD)
}
}
当我尝试编译时,我得到了
error: annotation argument needs to be a constant; found:
Constants.WORLD @myAnn(name = Constants.WORLD)
如果我删除了注释,那么HelloWorld将按预期编译并执行.
为什么我可以将Constants.WORLD用作java程序中注释的参数,而不是scala程序?我可以在Constants.java中修改它以允许从java或scala中使用它吗?我无法修改MyAnn.java,但我无法迁移Constants.java.
最佳答案 这是一个只在将java源文件提供给scala编译器时出现的错误,请参见问题
SI-2764.该示例在首先使用javac编译java文件然后将scalac的classpath指向生成的类文件时起作用.