第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

scala builder pattern 泛型函數(shù)調(diào)用

scala builder pattern 泛型函數(shù)調(diào)用

紫衣仙女 2019-03-20 14:15:42
public abstract class ManagedChannelBuilder<T extends ManagedChannelBuilder<T>> {    // ...}目前有這樣一個泛型類,泛型類型是繼承自ManagedChannelBuilder的。1 普通方式調(diào)用val builder = ManagedChannelBuilder.forTarget("");builder.nameResolverFactory(new DnsNameResolverProvider)builder.build()2 強制類型轉(zhuǎn)換調(diào)用val managedChannel = ManagedChannelBuilder.forTarget("")    .nameResolverFactory(new DnsNameResolverProvider())    .asInstanceOf[ManagedChannelBuilder].build();目前上面2種方式雖然是可以正確的調(diào)用方法,但是我期望能夠通過下面這種直接.的方式來調(diào)用而不需要強制類型轉(zhuǎn)換。val managedChannel = ManagedChannelBuilder.forTarget("")    .nameResolverFactory(new DnsNameResolverProvider()).build()不知道在scala中是否可以這樣,語法是什么樣子的?
查看完整描述

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[_]]]


查看完整回答
反對 回復 2019-04-25
  • 1 回答
  • 0 關注
  • 461 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號