У меня есть 3 java-файла: HW.java, myAnn.java и Constants.java в пакете myApp.
Константы.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(имя = Constants.WORLD)
Если я удалю аннотацию, то HelloWorld скомпилируется и выполнится, как и ожидалось.
Почему я могу использовать Constants.WORLD в качестве параметра аннотации из программы Java, но не из программы Scala? Есть ли что-то, что я могу изменить в Constants.java, чтобы его можно было использовать из java или scala? Я не могу изменить MyAnn.java и пока не могу перенести Constants.java.