无法在 scala 函数上使用 java 值作为 java 注释的参数

发布于 2024-11-27 05:02:17 字数 1061 浏览 1 评论 0原文

我有 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,如下所示 HelloWorld.scala:

object HelloWorld {
  @myAnn(name = Constants.WORLD)
  def main(args: Array[String]) {
    println("Hello " + Constants.WORLD)
  }
}

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

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

如果我删除注释,则 HelloWorld 将按预期编译和执行。

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

I have 3 java files: HW.java, myAnn.java, and Constants.java in package myApp.

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);
    }
}

My app compiles and runs fine as shown above, but I want to migrate HW.java to scala as
HelloWorld.scala:

object HelloWorld {
  @myAnn(name = Constants.WORLD)
  def main(args: Array[String]) {
    println("Hello " + Constants.WORLD)
  }
}

When I try to compile this, I get

error: annotation argument needs to be a constant; found:
Constants.WORLD @myAnn(name = Constants.WORLD)

If I remove the annotation then HelloWorld compiles and executes as expected.

Why can I use Constants.WORLD as a parameter to an annotation from a java program, but not from a scala program? Is there something I can modify in Constants.java to allow it to be used from either java or scala? I can't modify MyAnn.java, and I can't migrate Constants.java yet.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

纵情客 2024-12-04 05:02:17

这是一个仅在将 java 源文件输入 scala 编译器时才会出现的错误,请参阅问题 SI-2764。该示例在首先使用 javac 编译 java 文件,然后将 scalac 的类路径指向生成的类文件时有效。

It is a bug that only shows up when feeding the java source files into the scala compiler, see issue SI-2764. The example works when compiling the java files first using javac and then pointing scalac's classpath to the generated classfiles.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文