而不是使用看起来完全相同的两种方法,我如何提取通用参数(一个是List [T],另一个是通用T)

Gao*_*Gao 5 generics scala

我有两种方法几乎可以做同样的事情,方法签名在这里:

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的通用参数,而第一个方法则不能。我希望值是完全名单实例,而不是一般的牛逼。如何将这两种方法合并为一个?

And*_*eev 2

一般来说,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)