我知道当你有两个时,你可以匹配类型标签,但是如果你的一个对象是"任何"你怎么做到这一点呢? ?有没有办法完成下面的(不正确的)代码?请记住,功能"确认"设计为采用Any类型,因此它可以在运行时保持灵活性。谢谢
import scala.reflect.runtime.universe._
object TestRun extends App {
class Matcher[T:TypeTag] {
def confirm(x:Any):Boolean { //I don't want to add paramaters to this, must remain Any
val myTT = implicitly[TypeTag[T]]
x.isInstanceOf [myTT.tpe] // return an answer?
}
}
val m =new Matcher[Int]
//example of the output I would expect
m.confirm(44) //true
m.confirm("test") //false
val m2 =new Matcher[Seq[String]]
m2.confirm(Seq("A","B","C") //true
}
答案 0 :(得分:0)
你可以在此基础上建立:
def confirm(x: Any): Boolean = {
val myTT = implicitly[TypeTag[T]]
println(x.getClass)
println(myTT.mirror.runtimeClass(myTT.tpe))
// Compiles, but only exact matches
//x.getClass == myTT.mirror.runtimeClass(myTT.tpe)
// Better, but not perfect
myTT.mirror.runtimeClass(myTT.tpe).isAssignableFrom(x.getClass)
}
这基本上可行,但是