不能在scala函数上使用java值作为java注释的参数

时间:2011-07-29 23:02:15

标签: scala annotations cross-language

我有3个java文件:包myApp中的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)
  }
}

当我尝试编译时,我得到了

  

错误:注释参数需要是常量;发现:   Constants.WORLD @myAnn(name = Constants.WORLD)

如果删除注释,则HelloWorld会按预期编译并执行。

为什么我可以使用Constants.WORLD作为java程序中注释的参数,但不能使用scala程序?我可以在Constants.java中修改它以允许从java或scala中使用它吗?我无法修改MyAnn.java,我无法迁移Constants.java。

1 个答案:

答案 0 :(得分:2)

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