gpt4 book ai didi

scala 动态确定类型

转载 作者:行者123 更新时间:2023-12-04 11:55:25 27 4
gpt4 key购买 nike

我想创建其类型由运行时数据确定的对象实例:

trait Business
case class Business1() extends Business
case class Business2() extends Business

object Business {
def fromData(data:Array[Byte]): Business = data(0) match {
case 1 => new Business1
case 2 => new Business2
case _ => throw new RuntimeException("data error")
}
}

上面的代码可以完成它的工作,但有一个问题,它是关闭的。每当我实现新的 Business子类,我必须修改 Business.fromData代码,例如
case 3 => new Business3

我如何定义 Business.fromData一次,以后可以添加 Business3 , Business4无需注册?

编辑

我终于意识到这是 Multimethod的完美用例,即基于某个参数的函数进行调度。所以更普遍的问题应该是“ 如何在scala中做多方法”?我相信设计模式的存在只是因为语言无能,这就是为什么我不愿意接受基于工厂的答案。

最佳答案

这不能解决您的问题,但如果您制作 Business一个“密封”特征,那么编译器将捕获任何非穷尽的匹配,直到您更新 fromData :

sealed trait Business
case class Business1() extends Business
case class Business2() extends Business

biz match {
case Business1 => println("Business1")
}

……会导致……
warning: match is not exhaustive!
missing combination Business2

关于scala 动态确定类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13666465/

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