确定 Scala 中的泛型类型参数



目前,我正在使用Scala语言,我不知道如何确定泛型的类型。我有一个类作为以下代码。

class A[K, V]() {
  def print(): Unit = {
    //Check the real type here
  }
}

我想做的是:

  • 如果 K 是 Int => 打印输出It is an Integer
  • 如果 K 很长 => 打印出It is a Long
  • 如果 K 是字符串 => 打印出It is a String
您可以使用

TypeTag[T] .从文档中:

TypeTag[T] 封装了某种类型 T 的运行时类型表示形式。

示例代码:

import scala.reflect.runtime.universe._
class A[K: TypeTag, V]() {
  def print(): Unit = typeOf[K] match {
    case i if i =:= typeOf[Int] => println("It is an Integer")
    case _ => println("Something else")
  }
}

测试代码:

val a = new A[Int, String]
val b = new A[Double, String]
a.print()
b.print()

打印结果:

It is an Integer
Something else

编写泛型类时,应只关注对提供的值执行常见/泛型操作。但是,如果您真的想进行某种类型检查,则可以使用 asInstanceOf 方法执行此操作。

您需要修改打印方法,如下所示。

def print(k: K) = {
    if (k.isInstanceOf[Int]) println("Int type")
    else if ...
}

最新更新