我有两种方法几乎完全相同,方法签名在这里:
def setProperty[T: TypeTag](name: String, value: T): Unit
def setProperty[T: TypeTag](name: String, value: List[T]): Unit
我只能声明两个方法,因为我想捕获List的泛型参数,第一个方法不能。而且我希望value恰好是List实例而不是泛型T.如何将这两种方法合并为一种?
通常,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) => ...
}