【发布时间】:2014-07-19 05:37:09
【问题描述】:
我有一个由大量类实现的特征,我想使用在运行时实现此特征的类的名称,但要尽可能多地集中代码。
具体来说,在我的代码中,我使用标记来表示要在运行时初始化的类。令牌携带配置,并根据需要通过令牌实例化实际类,并结合运行时信息。为了与我的应用程序外部的资源链接,我希望能够访问为其定义了令牌的类的名称。看例子:
trait Token[Cls] {
val className = ???
// Example generic method depending on final class name
def printClassName = println(className)
}
case class ClassA(t: ClassAToken, runtimeContext: String) {
// a bunch of other code
}
object ClassA {
case class ClassAToken(configParam: String) extends Token[ClassA]
}
所以,我正在尝试实现className。理想情况下,我可以在编译时提取此信息一次。我怎样才能做到这一点,同时将样板代码排除在ClassA之外?不过,如果我可以删除类型参数并在运行时获取实现 Token 特征的类的名称,那也很棒。
【问题讨论】:
标签: scala reflection