scala typetag java,scala – 如何手动创建TypeTag?

我有兴趣手动创建一个TypeTag(从2.10M5开始):

object X {

import reflect.runtime.universe._

def tt[A : TypeTag](a: A) = typeTag[A] // how to do this manually?

val t = tt(List("")(_))

}

scalac -Xprint:typer< file> .scala导致

package {

object X extends scala.AnyRef {

def (): X.type = {

X.super.();

()

};

import scala.reflect.runtime.`package`.universe._;

def tt[A >: Nothing <: any a evidence reflect.runtime.universe.typetag scala.reflect.runtime.>

private[this] val t: reflect.runtime.universe.TypeTag[Int => String] = X.this.tt[Int => String](((x$1: Int) => immutable.this.List.apply[String]("").apply(x$1)))({

val $u: reflect.runtime.universe.type = scala.this.reflect.runtime.`package`.universe;

val $m: $u.Mirror = scala.this.reflect.runtime.`package`.universe.runtimeMirror(this.getClass().getClassLoader());

$u.TypeTag.apply[Int => String]($m, {

final class $typecreator1 extends TypeCreator {

def (): $typecreator1 = {

$typecreator1.super.();

()

};

def apply[U >: Nothing <: scala.reflect.base.universe with singleton scala.reflect.base.mirrorof u>

val $u: U = $m$untyped.universe;

val $m: $u.Mirror = $m$untyped.asInstanceOf[$u.Mirror];

$u.TypeRef.apply($u.ThisType.apply($m.staticModule("scala").asModuleSymbol.moduleClass), $m.staticClass("scala.Function1"), scala.collection.immutable.List.apply[$u.Type]($m.staticClass("scala.Int").asTypeSymbol.asTypeConstructor, $m.staticClass("java.lang.String").asTypeSymbol.asTypeConstructor))

}

};

new $typecreator1()

})

});

def t: reflect.runtime.universe.TypeTag[Int => String] = X.this.t

}

}

它似乎完全是编译器魔术,因为类型是硬编码的.不过有没有办法手动执行此操作?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值