如何检查盒装基元的运行时类型一致性?

时间:2014-07-23 11:12:11

标签: scala generics reflection

我定期与在使用基元参数化的泛型类中检查运行时类型一致性的问题发生冲突。假设

private def runtimeTypeOf(o :Any) =
    runtimeMirror(getClass.getClassLoader).classSymbol(o.getClass).toType

class TupleType[T1 :TypeTag, T2 :TypeTag] {
    def unapply(o :Any) = o match {
        case (v1, v2) if runtimeTypeOf(v1) <:< typeOf[T1] && runtimeTypeOf(v2) <:< typeOf[T2] => Some()
        case _ => None
    }
}

val LongString = new TupleType[Long, String]
(1L, "2") match { case LongString() => true; case _ => false }

上方匹配将返回false,因为v1java.lang.Long,而typeOf[T1]只是scala Long

无论如何从typeOf[T1]获取盒装的运行时类型?

0 个答案:

没有答案