我有两种方法几乎可以做同样的事情,方法签名在这里:
def setProperty[T: TypeTag](name: String, value: T): Unit
Run Code Online (Sandbox Code Playgroud)
def setProperty[T: TypeTag](name: String, value: List[T]): Unit
Run Code Online (Sandbox Code Playgroud)
我只能声明两个方法,因为我想捕获List的通用参数,而第一个方法则不能。我希望值是完全名单实例,而不是一般的牛逼。如何将这两种方法合并为一个?
一般来说,ADT 是这种情况下的最佳选择
sealed trait Value[T]
case class Single[T](value: T) extends Value[T]
case class Multiple[T](values: List[T]) extends Value[T]
def setProperty[T: TypeTag](name: String, value: Value[T]): Unit = value match {
case Single(value) => ...
case Multiple(values) => ...
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
89 次 |
| 最近记录: |