【问题标题】:Is there a way to treat scala value as constant from java有没有办法将scala值视为java中的常量
【发布时间】:2014-04-08 09:21:34
【问题描述】:

我想在我的 Scala 代码中定义一个值,并在我的 Java 代码(调用 scala)中将此值视为常量(在注释中使用)。

例如:

object MyValues {
   val a = 5
}

但是,当我尝试在 Java 注释中使用此值时,它给了我一个错误: java:属性值必须是常量

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface MyJavaAnnotation {
   int aValue() default MyValues.a(); // <-- Error
}

这样调用也不行:MyValues$.MODULE$.a();

我还尝试在 val 前面加上 final 关键字,但没有成功。

有解决办法吗?

【问题讨论】:

    标签: java scala constants


    【解决方案1】:

    没有,据我所知。作为一种解决方法,您可以定义一个调用该方法的 Java 常量:

    @Target(ElementType.TYPE)
    @Retention(RetentionPolicy.RUNTIME)
    public @interface MyJavaAnnotation {
       int aValue() default A;
       static final int A = MyValues.a();
    }
    

    认为它可以在同一个注释中定义,如果不将它移动到某个地方。

    【讨论】:

    • 不幸的是,如果在注释本身中定义,这会产生相同的错误,因为我可以更改 scala 代码(它是一个模块)我将创建一个 JAVA 代码来保存值并在 scala 中使用它在我的其他 java 模块中
    猜你喜欢
    • 2018-10-23
    • 2010-09-11
    • 2010-09-06
    • 1970-01-01
    • 2020-05-25
    • 2020-01-07
    • 1970-01-01
    • 2017-04-15
    • 1970-01-01
    相关资源
    最近更新 更多