而不是使用看起来完全相同的两个方法,我怎样才能提取泛型参数(一个是List [T],另一个是泛型 T)

问题描述 投票:5回答:1

我有两种方法几乎完全相同,方法签名在这里:

def setProperty[T: TypeTag](name: String, value: T): Unit
def setProperty[T: TypeTag](name: String, value: List[T]): Unit

我只能声明两个方法,因为我想捕获List的泛型参数,第一个方法不能。而且我希望value恰好是List实例而不是泛型T.如何将这两种方法合并为一种?

scala generics
1个回答
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) => ...
}
© www.soinside.com 2019 - 2024. All rights reserved.