首页 > 解决方案 > Scala:使用 Any 时如何区分列表与其他数据类型

问题描述

我有一个接受参数的函数。它的数据类型是Any. 我想与List其他数据类型区分开来,如String, Int, Double. 我想检查参数值是否是列表这是我的代码

val userList: List[String] = List("1","2")
val user = "UserList"
val name = "Name"

myFunction(user, userList)

def myFunction(fieldName: String, value: Any): Unit = {
  if (fieldName.equals(user)) {
    value match {
      case list: List[String] => print("its a list perform operation accordingly")
    }
  }
  else {
    log.info("its a string")
  }
}

但是编译器会生成警告:

类型模式 List[String](List[String] 的底层)中的非变量类型参数 String 未选中,因为它已被擦除消除

我想修复这个警告信息。

我不想用asInstanceOflike

val list = value.asInstanceOf[List[String]]

以避免出现此警告消息。

标签: scala

解决方案


由于您不关心的元素类型,List您可以将类型留空:

case _: List[_] => print("its a list perform operation accordingly")

您无法专门进行测试,List[String]因为执行测试时此信息不可用。如果您想这样做,您将需要使用类型类或多态性。


推荐阅读