[英]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.