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

為了賬號(hào)安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

如何將非通用接口擴(kuò)展為通用接口?

如何將非通用接口擴(kuò)展為通用接口?

UYOU 2021-08-19 21:38:28
我試圖擴(kuò)展,TemporalAdjuster這樣一個(gè)看起來像,public interface TypedTemporalAdjuster<T extends Temporal & Comparable<? super T>> {    T adjustInto(T temporal);}當(dāng)我嘗試直接擴(kuò)展基本接口時(shí),public interface TypedTemporalAdjuster<T extends Temporal & Comparable<? super T>>        extends TemporalAdjuster {    T adjustInto(T temporal);}我有一個(gè)錯(cuò)誤。...java:名稱沖突:...具有相同的擦除,但都不覆蓋另一個(gè)有沒有辦法做到這一點(diǎn)?到目前為止,我做到了。public interface TypedTemporalAdjuster<T extends Temporal & Comparable<? super T>> { //extends TemporalAdjuster {    static <T extends Temporal & Comparable<? super T>> TypedTemporalAdjuster<T> of(            final Class<T> temporalClass, final TemporalAdjuster temporalAdjuster) {        return temporal -> temporalClass.cast(temporalAdjuster.adjustInto(temporalClass.cast(temporal)));    }    T adjustInto(T temporal);}
查看完整描述

1 回答

?
神不在的星期二

TA貢獻(xiàn)1963條經(jīng)驗(yàn) 獲得超6個(gè)贊

您不能覆蓋具有更多限制參數(shù)的方法,即T adjustInto(T temporal);不會(huì)覆蓋,Temporal adjustInto(Temporal temporal);因?yàn)閰?shù)類型T比Temporal. 所以你現(xiàn)在有兩個(gè)同名的方法adjustInto,但由于類型擦除,參數(shù)類型在字節(jié)碼級(jí)別是相同的,因?yàn)門 extends Temporal & Comparable<? super T>被擦除為Temporal.


您可以通過將聲明更改為


public interface TypedTemporalAdjuster<T extends Comparable<? super T> & Temporal>

extends TemporalAdjuster {

    T adjustInto(T temporal);

}

如此,語義相同的T extends Comparable<? super T> & Temporal將被擦除為Comparable而不是Temporal。您還可以使用T extends Object & Comparable<? super T> & Temporalwhich 被擦除Object(通常,此類知識(shí)僅在您需要與 pre-Generics 代碼兼容時(shí)才相關(guān))。


但是,根本問題仍然存在,adjustInto(T temporal);不會(huì)覆蓋adjustInto(Temporal temporal);作為T更具限制性的參數(shù),因此現(xiàn)在接口不再是功能接口,因?yàn)樗袃蓚€(gè)抽象方法。


的子接口TemporalAdjuster必須提供其所有操作,包括adjustInto接受 any Temporal。所以你只能做


public interface TypedTemporalAdjuster<T extends Temporal & Comparable<? super T>>

extends TemporalAdjuster {


    static <T extends Temporal & Comparable<? super T>> TypedTemporalAdjuster<T> of(

            final Class<T> temporalClass, final TemporalAdjuster temporalAdjuster) {

        return temporal -> temporalClass.cast(temporalAdjuster.adjustInto(temporal));

    }


    @Override T adjustInto(Temporal temporal);

}

然而,這種包裝的調(diào)整器不能確保正確的參數(shù),只能隱藏在運(yùn)行時(shí)仍然可能失敗的類型轉(zhuǎn)換。但看起來您正在嘗試解決一個(gè)不存在的問題,因?yàn)槟梢院唵蔚厥褂脀ith時(shí)間上的方法來獲得類型安全的操作,例如


TemporalAdjuster a = TemporalAdjusters.lastDayOfMonth();


LocalDate     date1     = LocalDate.now(),     date2     = date1.with(a);

LocalDateTime dateTime1 = LocalDateTime.now(), dateTime2 = dateTime1.with(a);

ZonedDateTime zoned1    = ZonedDateTime.now(), zoned2    = zoned1.with(a);

這比你的包裝器更強(qiáng)大,就像你做的那樣,例如


TemporalAdjuster a = TemporalAdjusters.ofDateAdjuster(date -> date.plusDays(1));


ZonedDateTime zoned1 = ZonedDateTime.now(), zoned2 = zoned1.with(a);

就操作而言,您只定義一次LocalDate操作,而它通過即時(shí)轉(zhuǎn)換而不是強(qiáng)制轉(zhuǎn)換來適用于其他時(shí)間。


查看完整回答
反對 回復(fù) 2021-08-19
  • 1 回答
  • 0 關(guān)注
  • 168 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)