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

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

Java消費(fèi)者接口

Java消費(fèi)者接口

慕無(wú)忌1623718 2023-05-10 17:38:53
有人可以幫助我理解以下來(lái)自 Java 8 功能接口的代碼根據(jù)我的理解,accept() 將其作為輸入并對(duì)其進(jìn)行處理,但在使用 andThen() 的情況下不返回任何值它是如何工作的accept() 方法將類型 T 作為輸入并且不返回任何值。default Consumer<T> andThen(Consumer<? super T> after) {        Objects.requireNonNull(after);        return (T t) -> { accept(t); after.accept(t); };}
查看完整描述

3 回答

?
慕勒3428872

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

為了了解return從該 API 獲取的內(nèi)容,您可以嘗試將實(shí)現(xiàn)可視化為:


default Consumer<T> andThen(Consumer<? super T> after) {

    Objects.requireNonNull(after);

    return new Consumer<T>() { // return the complete Consumer implementation

        @Override

        public void accept(T t) {

            Consumer.this.accept(t); // accept current consumer

            after.accept(t); // and then accept the 'after' one.

        }

    };

}

現(xiàn)在把它聯(lián)系起來(lái)


(T t) -> { accept(t); after.accept(t); } 

是一個(gè)Consumer返回值,它確保accept首先編輯當(dāng)前的,然后是提到的那個(gè)after。


查看完整回答
反對(duì) 回復(fù) 2023-05-10
?
一只甜甜圈

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

一個(gè)函數(shù)式接口必須只有一個(gè)抽象方法。但是,它可以有任意數(shù)量的靜態(tài)方法和默認(rèn)方法。的方法Consumer有:

  1. accept(T)

    • 這是 的單一抽象方法Consumer。它接受類型的單個(gè)通用參數(shù)T并且不返回任何內(nèi)容(即void)。這是由 lambda 表達(dá)式或方法引用實(shí)現(xiàn)的方法。

  2. andThen(Consumer)

    • 這是默認(rèn)方法。換句話說(shuō),它有一個(gè)實(shí)現(xiàn),因此是非抽象的。該方法接受一個(gè)Consumer并返回另一個(gè)Consumer。因?yàn)樗且粋€(gè)默認(rèn)方法,所以單一的抽象方法Consumer仍然存在accept(T)。

上面解釋了為什么Consumer可以有一個(gè)方法返回void. 現(xiàn)在,當(dāng)談到 的實(shí)現(xiàn)時(shí)andThen,重要的是要意識(shí)到實(shí)際上涉及三個(gè) Consumers:

  1. 被調(diào)用的實(shí)例andThen。

  2. 引用的實(shí)例after

  3. 實(shí)例返回給調(diào)用者。

如果您對(duì)代碼進(jìn)行格式化,那么并非所有內(nèi)容都在同一行上,這可能更容易理解:

default Consumer<T> andThen(Consumer<? super T> after) {

    Objects.requireNonNull(after);

    // Returns Consumer instance #3. The lambda is the implementation

    // of the 'accept' method.

    return (T t) -> {

        accept(t);       // Invokes 'accept' on Consumer instance #1.

        after.accept(t); // Invokes 'accept' on Consumer instance #2.

    }

}


查看完整回答
反對(duì) 回復(fù) 2023-05-10
?
慕尼黑8549860

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

我想我理解你的擔(dān)憂。您想知道如果返回 voidandThen()之后為什么可以調(diào)用。accept()accept()

問題是,您首先定義一個(gè)Consumer對(duì)象,然后在該實(shí)例上調(diào)用andThen()方法。例如:

Consumer<String> consumer = s -> System.out.println(s);
consumer.andThen(s -> System.out.println(s.toUpperCase()));


查看完整回答
反對(duì) 回復(fù) 2023-05-10
  • 3 回答
  • 0 關(guān)注
  • 162 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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