1 回答

TA貢獻1796條經(jīng)驗 獲得超7個贊
剛好碰到同樣的問題。
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。
那么就變成調(diào)用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<?>的時候就
.asInstanceOf[ManagedChannelBuilder[_ <: ManagedChannelBuilder[_]]]
添加回答
舉報