簡體   English   中英

Java - setter 和 getter 的方法參考

[英]Java - method reference for setter and getter

寶卓class:

package com.lambda.jay;

public class Person {
    private String name;

    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
}

另一個 class 用於啟動“Person”對象:

package com.fi.lambda.jay;
import java.util.function.BiConsumer;
import java.util.function.Function;

public class Actor {
    public <T,R> void printField(T obj, Function<? super T,? extends R> getter1) {
        System.out.println(getter1.apply(obj).toString());
    }

    public <T,R> void setField(T obj, R value, BiConsumer<T, R> setter) {
        setter.accept(obj, value);
    }

    public static void main(String[] args) {
        Person person = new Person();
        Actor actor = new Actor();

        actor.setField(person, "Bob", Person::setName);// (a,b) -> a.setB(b);
        actor.printField(person, Person::getName);
    }
}
  1. 我們如何解釋用於設置器的 java lambda? BiConsumer<T, R>功能接口已用於setField的參數類型,並且Person::setName作為方法的參數值傳遞。 我對BiConsumer<T, R>的理解是它是一個功能接口,用於表示 lambda function 有兩個輸入參數,沒有返回參數,即 (a,b) -> a+b; 其中a+b可以是任何邏輯(使用 a 和 b 參數的步驟序列)。 但在上面的代碼示例中 BiConsumer<T, R> 表示 lambda function (personObject,nameValue) -> personObject.set(nameValue);
  2. 我們如何解釋用於吸氣劑的 java lambda? 我的理解Function<T,R> = (a) -> return math(a); 而在上面的代碼示例中Function<T,R> = (personObject) -> return personObject.getName();

請幫助我理解以上兩種解釋。

  1. 確切地說,一個BiConsumer消費了 2 樣東西。 [A] Person class 的一個實例,以及 [B] 要設置的name字段的值。

  2. 是的。 輸入是Person的一個實例,output 是那個人的名字。

關鍵的實現是getter lambda 表示 getter 本身,沒有與之關聯的實際人員實例。 如果你確實想要,你可以; 類似somePersonInstance::getName的東西是Producer (不接受輸入並提供輸出),而類似Person::getName的東西是 Function,需要 1 個Person實例並提供 output。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM