如果我的对象内部带有case类,则像这样:
object Color {
case class Shade (name: String)
case class Type (myType: String)
case class Available (isAvailable: Boolean)
}
并且我有一个如下的方法:
def something(message: Shade) {
...
}
def something(message: Type) {
...
}
如何将上述方法变成一种(DRY原理),使其接受Shade
或Type
?
答案 0 :(得分:0)
您可以抽象案例类并接受抽象类作为参数。
如果要基于具体类型进行处理,请在输入上使用模式匹配,如下所示。
object Visitor {
trait Message {
def name: String
}
object Color {
case class Shade (name: String) extends Message
case class Type (name: String, myType: String) extends Message
case class Available (isAvailable: Boolean)
}
def processSomething(message: Message): Unit = {
message match {
case Shade(name) => println(s"Shade: ${name}")
case Type(name, myType) => println(s"Type: ${myType}")
}
}
def main(args: Array[String]): Unit = {
processSomething(Shade("I'm shade"))
processSomething(Type("I'm type", "I'm type"))
}
}
如果案例类没有共同的字段,但它们以某种方式表示 同一件事,那么您可以拥有“标记界面”
sealed trait Message
case class Shade (myName: String) extends Message
case class Type (myType: String) extends Message