爲什麼不能使用類型別名來處理類型標籤。例如。鑑於類型別名擰緊類型標籤?
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
}
所以似乎我根本無法使用我的別名。
好的。但是,我是否也需要更改聲明網站?因爲我似乎沒有從由'weakTypeOf'返回到'TypeTag [A]'的類型進行隱式轉換。例如。 'found:reflect.runtime.universe.Type; required:reflect.runtime.universe.TypeTag [A]'(當調用Bar [A](fooTpe)') –
好吧,好像我在從手機回答時忽略了一些東西。首先,'typeOf'和'weakTypeOf'的結果是一個'Type',而不是'TypeTag',所以'fooTpe'不適合'Bar.apply'。 –
其次,您可以完全擺脫'weakTypeOf'並將'TypeTag [A]'改爲'WeakTypeTag [A]'。之後,它會正常工作。 –