如何根据泛型类型设置变量的值 - Scala

时间:2017-09-25 21:07:47

标签: scala

我正在尝试做这样的事情: -

willFinishLaunching

我如何在scala中执行此操作?我不确定如何访问'A'并安全地检查其类型。

由于

3 个答案:

答案 0 :(得分:2)

由于类型擦除,您无法直接访问T的类型。编译器为您的所有类生成ClassTag类型,以便您可以绕过类型擦除限制。您可以隐式访问ClassTag

import scala.reflect.runtime.universe._

class Hello[A : TypeTag] {
  val DBAccessDAO = typeTag[A] match {
        case tag if tag == typeTag[Class1] => ...
        case tag if tag == typeTag[Class2] => ...
    }
} 

答案 1 :(得分:0)

这是一个使用TypeTag在编译时查找类信息的快速示例

import scala.reflect.runtime.universe.{TypeTag,typeOf}


trait Animal26
{
  val name: String
  val sound: String
}


object Tiger26 extends Animal26{

  override val name = "tiger"
  override val sound = "grrr"
}


trait Person26
{
  val title: String
  val status: String
}


object Employee26 extends Person26{

  val title = "worker"
  val status = "professional"

}


class Stack[A: TypeTag] {

  def getMyClass =
  {
    if (typeOf[A] =:= typeOf[Person26])
    Employee26
    else
     Tiger26
  }


}

object App26 extends App{

  val stack = new Stack[Person26]

  println(stack.getMyClass.toString)

}

答案 2 :(得分:0)

你可以使用TypeTag或来自Shapless库的东西,但在你特定的情况下我会建议查看类型类模式。使用反射技巧获取类型参数几乎总是不是最好的解决方案。