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

标签 scala generics

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

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/

相关文章:

scala - 如何在 Scala 中创建查找 map

swift - 可以制作通用枚举 UIPickerView

c# - 为什么简单的 List<T> 似乎比 ArrayList 慢?

c# - C# 中的数组与泛型

java - 在这种情况下如何在 java 泛型中使用多个边界

c# - 在 C# 中转换泛型类

xml - 如何访问 Scala XML 中的父元素

scala - 适用于Spark Case类的Scala通用编码器

scala - AWS S3 中的 FileUtil.copyMerge()

scala - 支持 Scala 中 List[(String, Any)] 的通用反序列化