我正在尝试做这样的事情: -
willFinishLaunching
我如何在scala中执行此操作?我不确定如何访问'A'并安全地检查其类型。
由于
答案 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库的东西,但在你特定的情况下我会建议查看类型类模式。使用反射技巧获取类型参数几乎总是不是最好的解决方案。