Подтвердить что ты не робот

Лучшая практика использования констант в аннотациях scala

Я использую гобелен 5 как мой выбор веб-фреймворка. Гобелен позволяет мне определять символы в классе configure и вводить символы в другие компоненты.

например,

public interface SymbolConstants {
  static String DEFAULT_TIMEOUT_KEY = "default.timeout"; 
}

public class AppModule {
   void contributeApplicationDefault(Configuration conf) {
       conf.add(SymbolConstants.DEFAULT_TIMEOUT_KEY, "10");
   }
}

public class MyComponent {
  @Symbol(SymbolConstants.DEFAULT_VALUE_KEY)
  private long timeout;
}

Возможность определять статические константы и использовать их в качестве значений аннотаций дает мне проверку времени компиляции.

Мне интересно, как определить константы и использовать их в качестве значений аннотаций scala. Если нет, то какова наилучшая практика для определения/ограничения значения, которое мы можем назначить аннотации в scala.

4b9b3361

Ответ 1

Ключевое слово "final" требуется, чтобы заставить компилятор испускать его, как вы это делали, в Java. Например.

object Foo
{
   final val MY_SYMBOLIC_CONSTANT="whatever"
}

Кажется, что в противном случае вы получаете только метод доступа под капотом, который не статически вычисляется.

Ответ 2

Кажется невозможным w/ scala версии 2.8.1.final, 2.8.2.final или 2.9.1.final(результат был одинаковым для всех):

object Constant { val UNCHECKED = "unchecked" }

class Test {                                       
    @SuppressWarnings(Array(Constant.UNCHECKED))   
    def test: Unit = println("testing.. 1, 2... 3")
}

.

<console>:7: error: annotation argument needs to be a constant; found: Constant.UNCHECKED
           @SuppressWarnings(Array(Constant.UNCHECKED))