4

我有 3 个 java 文件:myApp 包中的 HW.java、myAnn.java 和 Constants.java。

常量.java:

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

myAnn.java:

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

硬件.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 编译器时才会出现的错误,请参阅问题SI-2764。该示例首先使用编译 java 文件javac,然后将scalac的类路径指向生成的类文件。

于 2011-08-02T07:44:46.360 回答