确定Scala中的泛型类型参数

时间:2017-11-06 06:34:54

标签: scala generics

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

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

我想做的是:

  • 如果K是Int =>打印出It is an Integer
  • 如果K为Long =>打印出It is a Long
  • 如果K是String =>打印出It is a String

2 个答案:

答案 0 :(得分:1)

您可以使用TypeTag[T]。来自documentation

  

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

答案 1 :(得分:0)

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

您需要修改类似下面的打印方法。

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