java scala constants

java - scala field declaration



Las mejores prácticas para el uso de constantes en anotaciones scala (2)

Yo uso tapiz 5 como mi elección de marco web. Tapestry me permite definir símbolos en la clase de configuración e inyectar símbolos en otros componentes.

por ejemplo,

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; }

La capacidad de definir constantes estáticas y usarlas como valores de anotación me permite verificar el tiempo de compilación.

Me pregunto cómo definir constantes y usarlas como valores de anotaciones de scala. Si no es así, ¿cuál es la mejor práctica para definir / limitar el valor que podemos asignar a las anotaciones en scala?


La palabra clave ''final'' es necesaria para que el compilador la emita como lo haría en Java. P.ej,

object Foo { final val MY_SYMBOLIC_CONSTANT="whatever" }

Parece que, de lo contrario, solo obtienes un método de acceso bajo el capó que no es calculable estáticamente.


No parece posible con versiones de scala 2.8.1.final, 2.8.2.final o 2.9.1.final (el resultado fue el mismo con todos):

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))