scala - 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 未选中,因为它已被擦除消除
我想修复这个警告信息。
我不想用asInstanceOf
like
val list = value.asInstanceOf[List[String]]
以避免出现此警告消息。
解决方案
由于您不关心的元素类型,List
您可以将类型留空:
case _: List[_] => print("its a list perform operation accordingly")
您无法专门进行测试,List[String]
因为执行测试时此信息不可用。如果您想这样做,您将需要使用类型类或多态性。
推荐阅读
- c++ - Qt:SIGNAL 和 SLOT 在自定义 QDialog 窗口中不起作用
- c# - 为什么我不能让 WinForms 应用程序注册 COM 互操作?
- sql - 从当前日期起 3 个月前获取 Sql Dates,不包括周末和 Null 值
- angular - 我已经遵循了受信任的网络活动的所有步骤,但使用 chrome dev 仍然可以看到地址栏。如何在受信任的网络活动中获取 webview?
- node.js - 如何在 Nodejs 代理服务器上查询请求?
- javascript - 在 NodeJS 中获取已解析的 Markdown 文件的前两个 HTML 元素
- performance - JMeter 在非 gui 中响应时间更高
- java - setText() 错误,方法无法解析 TextView
- javascript - 我无法让 return 语句正常工作
- reactjs - Link 内的 React-router 可点击元素