我有两个几乎做同样事情的方法,方法签名在这里:
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) => ...
}
关于scala - 而不是使用看起来完全相同的两种方法,我怎么能提取泛型参数(一个是 List[T],另一个是泛型 T),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55795939/