无法在 scala 函数上使用 java 值作为 java 注释的参数
我有 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
这是一个仅在将 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 pointingscalac
's classpath to the generated classfiles.