我想看看在以下情况下是否有任何解决类型擦除的方法:
我有一个特质
trait IHandle[T <: ICommand] {
def handle(command: T) : Unit
}
我希望找到使用反射的具体实现说
IHandle[MyCommand]
可能看起来像
class MyCommandHandler(dependency:Dependency) extends IHandle[MyCommand] {
def handle(command:MyCommand): Unit = ...
}
(我正在玩CQRS模型中创建一个命令调度程序,我很高兴听到这是一个完全错误的方法来接受Scala并且愿意接受建议)
答案 0 :(得分:2)
你可以使用Manifest,但我强烈建议避免在Scala中使用这样的东西......这绝对是IMO的错误做法。
基本上你需要一个注册表(可能是Map[Manifest[_], IHandle[_]]
,你可以在那里存储所有的实现,然后你可以在注册表中查找。
def store[T : Manifest](handle: Handle[T]) = map.put(manifest[T], handle)
def lookup[T : Manifest] = map.get(manifest[T])
// And then ...
store(new Handle[Foo])
lookup[Foo]
正确的方法可能意味着类型类的使用(尝试google),很难真正给你一个完整的解决方案,而不必了解你正在做的事情...即使我也在做关于Scala的一些CQRS开发。
请不要犹豫,连接到freenode服务器上的#scala频道进行聊天。