为什么类型标签不能使用类型别名。例如。给定
trait Foo
object Bar {
def apply[A](implicit tpe: reflect.runtime.universe.TypeTag[A]): Bar[A] = ???
}
trait Bar[A]
我想在以下方法中使用别名,因为我需要输入A
大约二十次:
def test {
type A = Foo
implicit val fooTpe = reflect.runtime.universe.typeOf[A] // no funciona
Bar[A] // no funciona
}
接下来尝试:
def test {
type A = Foo
implicit val fooTpe = reflect.runtime.universe.typeOf[Foo] // ok
Bar[A] // no funciona
}
所以我似乎根本不能使用我的别名。
答案 0 :(得分:1)
请改用weakTypeOf。反射内部区分全局可见声明和局部声明,因此您也需要区别对待它们。可以在Scala的更高版本中删除此疣。
答案 1 :(得分:0)
更改def apply
声明:
import scala.reflect.runtime.universe._
trait Foo
object Bar {
def apply[A]()(implicit tpe: TypeTag[A]): Bar[A] = ???
}
trait Bar[A]
class test {
type A = Foo
implicit val foo = typeOf[A]
def test = Bar[A]()
}