我最近偶然發現了一段我無法用我對java的理解來解釋的代碼。我創造了這個小版本同種結構的:奇怪的構造,java將靜態方法轉換爲類
public class StaticMethodClass {
static void IDK(Integer i, String somethingElse) {
System.out.println("It has been done");
}
public static void main(String... whatever) {
Action.ITEM.doStuff();
}
}
interface Func {
void exec(Integer i, String somethingElse);
}
enum Action {
ITEM(StaticMethodClass::IDK);
private Func f;
Action(Func f){
this.f = f;
}
void doStuff() {
this.f.exec(1, "huh");
}
}
的一部分,我不能環繞它我的頭Action.ITEM的方式構造,因爲它應該得到落實Func
接口的類。相反,它傳遞了一種方法,它以某種方式隱式轉換。
我的問題是這是如何工作的,以及這裏適用的規則。
您應該閱讀有關方法參考。 – Eran
'StaticMethodClass :: IDK'是一個函數的引用,該函數具有與'Func.exec()'方法相同的參數和相同的返回類型,因此這是一種使用已有方法實現接口的簡短形式 –
請參閱Java文檔https://docs.oracle.com/javase/tutorial/java/javaOO/methodreferences.html – Akshay