Scala 斯卡拉“;“工厂”;从字符串创建案例对象的设计模式
我是scala新手,正在寻找“scala”方法来创建由外部源从字符串枚举获取的正确案例类(符合特征)。由于源是外部的,因此应该对输入是否正确进行一些验证,并且给定的有效输入将返回正确的case类。我假设这是一个“工厂”,返回给定特征的可选case类 例如:Scala 斯卡拉“;“工厂”;从字符串创建案例对象的设计模式,scala,traits,case-class,Scala,Traits,Case Class,我是scala新手,正在寻找“scala”方法来创建由外部源从字符串枚举获取的正确案例类(符合特征)。由于源是外部的,因此应该对输入是否正确进行一些验证,并且给定的有效输入将返回正确的case类。我假设这是一个“工厂”,返回给定特征的可选case类 例如: trait ProcessingMechanism case object PMv1 extends ProcessingMechanism case object PMv2 extends ProcessingMechanism case
trait ProcessingMechanism
case object PMv1 extends ProcessingMechanism
case object PMv2 extends ProcessingMechanism
case object PMv3 extends ProcessingMechanism
...
...
我希望有一个工厂返回正确的处理机制
i、 e
不必求助于宏或外部库,您可以做如下简单的事情:
object ProcessingMechanism {
def unapply(str: String): Option[ProcessingMechanism] = str match {
case "V1" => Some(PMv1)
case "V2" => Some(PMv2)
// ...
case _ => None
}
}
// to use it:
def methodAcceptingExternalInput(processingMethod: String) = processingMethod match {
case ProcessingMethod(pm) => // do something with pm whose type is ProcessingMethod
}
// or simply:
val ProcessingMethod(pm) = externalString
正如在对问题的评论中所建议的那样,最好将特征标记为
sealed
如果您有sealed trait
,您可以使用该问题可能会有所帮助。如果你正在寻找一个图书馆,它可能是当今最流行的。
object ProcessingMechanism {
def unapply(str: String): Option[ProcessingMechanism] = str match {
case "V1" => Some(PMv1)
case "V2" => Some(PMv2)
// ...
case _ => None
}
}
// to use it:
def methodAcceptingExternalInput(processingMethod: String) = processingMethod match {
case ProcessingMethod(pm) => // do something with pm whose type is ProcessingMethod
}
// or simply:
val ProcessingMethod(pm) = externalString