这个想法是,例如我们得到了一些对象的类型:
val tm = getTypeTag("String here").tpe
//> tm: reflect.runtime.universe.Type = java.lang.String
// for example I got another val or var, of some type:
val tmA: Any = "String here"
//> tmA: Any = String here
如何制作tmA.InstanceOf(tm)
(这是一个助记符代码)? '原因tm
它不是类型别名,我们无法准确地InstanceOf[tm]
。
已编辑
我指的是asIstanceOf
的模拟函数,用于进行类型转换
EDITED2
我自己会部分回答我的问题。所以如果我们有TypeTags
就很容易了!
def tGet[T](t: TypeTag[T], obj: Any): T = obj.asInstanceOf[T]
如果我们只有Type
而不是整个TypeTag[T]
,那将是一个更难的情况。
答案 0 :(得分:6)
您可以使用mirror来反映实例:
val mirror = runtimeMirror(getClass.getClassLoader)
def isTm(a: Any) = mirror.reflect(a).symbol == tm.typeSymbol
然后:
scala> isTm("String here": Any)
res0: Boolean = true
scala> isTm(List("String here"): Any)
res1: Boolean = false
但我认为我不得不告诉你这是个坏主意。
答案 1 :(得分:-1)
您只需要在变量后使用变量的type属性。 举个例子,你可以写:
val h =“你好” val b:Any =“hhhh”
val stringB:String = b.asInstanceOf [h.type]
的println(stringB)