在 scala 注释中使用常量的最佳实践

2022-09-02 21:26:56

我使用 tapestry 5 作为我选择的 Web 框架。Tapestry 允许我在配置类中定义符号,并将符号注入到其他组件中。

例如

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 中注释的值的最佳实践是什么。


答案 1

“final”关键字是使编译器发出它所必需的,就像在Java中所做的那样。例如,

object Foo
{
   final val MY_SYMBOLIC_CONSTANT="whatever"
}

似乎,否则,你只会得到一个底层的访问器方法,这是静态可计算的。


答案 2

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

推荐