Невозможно использовать значение java в качестве параметра для java-аннотации в функции scala - PullRequest
4 голосов
/ 30 июля 2011

У меня есть 3 java-файла: HW.java, myAnn.java и Constants.java в пакете 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);
    }
}

Мое приложение компилируется и работает нормально, как показано выше, но я хочу перенести 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 компилируется и выполняется как ожидалось.

Почему я могу использовать Constants.WORLD в качестве параметра для аннотации из Java-программы, но не из программы Scala? Есть ли что-то, что я могу изменить в Constants.java, чтобы позволить использовать его из java или scala? Я не могу изменить MyAnn.java и еще не могу перенести Constants.java.

1 Ответ

2 голосов
/ 02 августа 2011

Это ошибка, которая появляется только при подаче исходных файлов java в компилятор scala, см. Проблему SI-2764 .Пример работает при компиляции java-файлов, сначала используя javac, а затем указывая путь к классу scalac на сгенерированные файлы классов.

...