gpt4 book ai didi

java - Scala,参数化特征的具体实现的反射(reflect)

转载 作者:行者123 更新时间:2023-11-30 04:45:58 26 4
gpt4 key购买 nike

我想看看在以下情况下是否有任何方法可以绕过类型删除:

我有一个特点

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 中采用的完全错误的方法,并且愿意接受建议)

最佳答案

你可以使用 Manifest,但我强烈建议避免在 Scala 中使用这样的东西...在我看来,这绝对是错误的方法。

基本上,您需要一个注册表(可能是一个Map[Manifest[_], IHandle[_]],您可以在其中存储所有带有 list 的实现,然后您可以在注册表中查找。

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]

正确的方法可能意味着使用类型类(尝试用谷歌搜索),如果没有对你正在做的事情的总体了解,很难真正给你一个完整的解决方案......即使我也在做Scala 上的一些 CQRS 开发。

不要犹豫,连接到 freenode 服务器上的 #scala channel 来讨论这个问题。

关于java - Scala,参数化特征的具体实现的反射(reflect),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10946394/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com