java - scala builder pattern 泛型函数调用
黄舟
黄舟 2017-04-18 10:10:09
0
1
493
黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

全部回覆(1)
阿神

剛好碰到同樣的問題。
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>

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!