首页 > 解决方案 > Scala:如何检查 Array[T] 的类型

问题描述

我有一个Array[T],如何检查它的类型?

我试过

def check[T](a: Array[T]) = {
  a match {
    case _: Array[Int] => // create type specified IntVector
    case _: Array[Float] => // create type specified FloatVector
  }
}

编译器引发错误

Scrutinee is incompatible with pattern type, found: Array[Int], required: Array[T]

我想这样做的原因是,假设我能够枚举所有类型,而目前只有 Int 和 Float

def check[T](a: Array[T]) = {
  val base: Base = baseVector
  val derived = a match {
    case _: Array[Int] => base.asInstanceOf[IntVector]      
    case _: Array[Float] => base.asInstanceOf[FloatVector]
  }
  derived.run()
}
abstract class Base
  def run()
class IntVector extends Base
  override def run()
class FloatVector extends Base
  override def run()

标签: scalagenericspattern-matching

解决方案


这对我有用:

def check[T](a: Array[T]) = {
  a match {
    case x if x.isInstanceOf[Array[Int]] => println("int")
    case y if y.isInstanceOf[Array[Float]]  => println("float")
    case _ => println("some other type")
  }
}

推荐阅读