有没有办法将scala值视为java中的常量

时间:2014-04-08 09:21:34

标签: java scala constants

我想在我的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加前缀,但没有成功。

有解决方法吗?

1 个答案:

答案 0 :(得分:1)

不,据我所知。作为一种变通方法,您可以定义一个调用方法的Java常量:

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

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