簡體   English   中英

使用方法引用調用靜態方法

[英]Using method reference to call static methods

我試圖理解方法引用的概念。 在嘗試不同的調用時,我偶然發現了一個我無法完全理解的場景。

canClim在沒有參數的情況下使用時,它可以毫無問題地傳遞給forEach盡管forEach接受一個應該接受參數的 Consumer? canClim添加參數時,它會阻止編譯嗎?

但是,當canClim被聲明為 static 時,它不會在不向簽名中添加 static void canClim(Animal a)情況下編譯。 不應該在沒有 Animal 類的實例的情況下調用靜態方法,因為它是靜態的嗎?

謝謝!

import java.util.*;

class Animal {
    void canClim() {
        System.out.println("I am a climber!");
    }
}

public class MethodReferencer {
    public static void main(String[] args) {
        Animal a = new Animal();
        Animal b = new Animal();
        List<Animal> list = new ArrayList<>(Arrays.asList(a, b));
        list.forEach(Animal::canClim);

    }
}

當方法為非靜態時,

Animal::canClim
相當於
animal -> animal.canClim()
(animal) -> animal.canClim()

lambda 左邊的animal是消費者函數參數,身體在右邊。 所以是的,你那里供應消費者。

靜態方法的行為略有不同。
例如, Integer::parseInt會變成str -> Integer.parseInt(str)
基本上參數被提供給方法的參數。 所以在靜態方法中,你需要有一個參數才能使用方法引用。

Consumer有一個accept參數的方法。 沒有參數的靜態方法不能轉換為Consumer ,是嗎?

暫無
暫無

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

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