阿神2017-04-18 10:12:09
剛好碰到同樣的問題。
1和2方法不知道你是怎麼做到可以正確的使用的,最簡單的辦法也要
asInstanceOf[ManagedChannelBuilder[_]]
其實
public static ManagedChannelBuilder<?> forTarget(String target) {
return ManagedChannelProvider.provider().builderForTarget(target);
}
回傳的是ManagedChannelBuilder[Any]。實際上這裡不應該是Any。而是一個
T extends ManagedChannelBuilder<T>
然後nameResolverFactory又把這個T回來了,作為Any。
那麼就變成呼叫Any的build方法了,顯然這樣過不了編譯。
希望有更好的方法~
================================================= ==
更新一下
簡化一下問題:
class A[T <: A[T]] {
def retA: A[_] = ???
def retT: T = ???
}
class B extends A[B]
(new B).retA.retT
這是原先的定義,如果把改成這樣def retA: A[_ <: A[_]] = ???
應該就沒問題了。
因此,可以這樣
(new B).retA.asInstanceOf[A[_ <: A[_]]].retT.retT....
同理,返回ManagedChannelBuilder>
的時候就ManagedChannelBuilder<?>
的时候就.asInstanceOf[ManagedChannelBuilder[_ <: ManagedChannelBuilder[_]]]
.asInstanceOf[ManagedChannelBuilder[_ <: ManagedChannelBuilder[_]]]