我想检查Scala中的obj是否是Array类型,而不是关心内部是什么类型的值。有没有简单的方法来做到这一点?
var x = Array(1,2,3)
x.isInstanceOf[Array[Any]] // which is false
我希望它是真的。
更新
我有一个功能:
def someFunction(obj: Any) {
if (obj.isInstanceOf[Int]) {
// do something
}
if (obj.isInstanceOf[String]) {
// do something
}
if (obj.isInstanceOf[Array[Any]) {
// for each of the obj inside the Array do something
}
}
答案 0 :(得分:6)
数组Array(1,2,3)
的类型为Int
,因此Array[Any]
只会在Array
collection的情况下奇怪地返回false。
如果您不关心Array
的类型,则可以与Array[_]
(任何类型的数组)进行比较
scala> var x = Array(1,2,3)
x: Array[Int] = Array(1, 2, 3)
scala> x.isInstanceOf[Array[Int]]
res0: Boolean = true
scala> x.isInstanceOf[Array[_ <: Any]]
res7: Boolean = true
scala> x.isInstanceOf[Array[_ <: AnyVal]]
res12: Boolean = true
scala> x.isInstanceOf[Array[_]]
res13: Boolean = true
scala.Int
扩展AnyVal
扩展Any
,您可以明确提及_ extends AnyVal
。
但是List[T]
之类的其他scala集合是List[Any]
的实例
scala> List(1, 2).isInstanceOf[List[Any]]
res30: Boolean = true
scala> Seq(1, 2).isInstanceOf[Seq[Any]]
res33: Boolean = true
此外,List[T]
是Seq[Any]
的实例,因为List
延伸Seq
,T
延伸Any
scala> List(1, 2).isInstanceOf[Seq[Any]]
res35: Boolean = true
您可以使用模式匹配方式解决if else
的AND,,
array match {
case x: Int => println("int")
case x: String => "string"
case Array[Int] => println("ints")
case Array[String] => println("strings")
case _ => println("whatever")
}
答案 1 :(得分:3)