【发布时间】:2023-04-02 14:14:01
【问题描述】:
我有一个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()
【问题讨论】:
-
你使用什么版本的 Scala?
-
@texasbruce 2.11.11
-
为什么需要这样做?
-
@LuisMiguelMejíaSuárez 如前所述,我需要根据不同的
Array[T]创建不同的对象 -
相信编译器,而不是 IDE
标签: scala generics pattern-matching