我使用tapestry 5作为我选择的Web框架。 Tapestry允许我在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中的注释分配的值的最佳做法是什么。
答案 0 :(得分:20)
使用'final'关键字使编译器像在Java中一样发出它。如,
object Foo
{
final val MY_SYMBOLIC_CONSTANT="whatever"
}
看起来,否则,你只能在引擎盖下获得一个不可静态计算的存取方法。
答案 1 :(得分:1)
似乎不可能使用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))