亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

Java消費者接口

Java消費者接口

慕無忌1623718 2023-05-10 17:38:53
有人可以幫助我理解以下來自 Java 8 功能接口的代碼根據我的理解,accept() 將其作為輸入并對其進行處理,但在使用 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貢獻1848條經驗 獲得超6個贊

為了了解return從該 API 獲取的內容,您可以嘗試將實現可視化為:


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.

        }

    };

}

現在把它聯系起來


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

是一個Consumer返回值,它確保accept首先編輯當前的,然后是提到的那個after。


查看完整回答
反對 回復 2023-05-10
?
一只甜甜圈

TA貢獻1836條經驗 獲得超5個贊

一個函數式接口必須只有一個抽象方法。但是,它可以有任意數量的靜態方法和默認方法。的方法Consumer有:

  1. accept(T)

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

  2. andThen(Consumer)

    • 這是默認方法。換句話說,它有一個實現,因此是非抽象的。該方法接受一個Consumer并返回另一個Consumer。因為它是一個默認方法,所以單一的抽象方法Consumer仍然存在accept(T)。

上面解釋了為什么Consumer可以有一個方法返回void. 現在,當談到 的實現時andThen,重要的是要意識到實際上涉及三個 Consumers:

  1. 被調用的實例andThen。

  2. 引用的實例after。

  3. 實例返回給調用者。

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

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.

    }

}


查看完整回答
反對 回復 2023-05-10
?
慕尼黑8549860

TA貢獻1818條經驗 獲得超11個贊

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

問題是,您首先定義一個Consumer對象,然后在該實例上調用andThen()方法。例如:

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


查看完整回答
反對 回復 2023-05-10
  • 3 回答
  • 0 關注
  • 165 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號