[英]Java equivalent of C# Delegates (queues methods of various classes to be executed)
域名注冊地址:
是否有 Java 等價於 C# 的委托,它允許我將各種類的方法排隊並將它們動態添加到隊列中? 語言構造而不是它的代碼。
背景:
我以前使用過 Unity 3D,我喜歡腳本的Update
方法之類的東西。 只需聲明該方法即可將其添加到每幀執行的方法列表中。 我想在我的 LWJGL 游戲中創建類似的東西。 為此,我想使用委托(或類似的東西)。 是否有任何 Java 語言結構可以讓我這樣做? 我更喜歡包含兩個或更多(以便我可以挑選最適合我的代碼的)結構和使用它們的方法的答案。 我不想要代碼,我只想知道從哪里開始。 編程中最有趣的部分是解決問題,我不想被剝奪。 此外,我不想被確切地告知如何去做。 我想被引導到正確的方向,而不是被朝那個方向扔到那個目的地。 我將如何學習? :-)
實際上,Java 中的委托沒有確切的對應物。 但是有一些結構可以模仿它們的行為。
與 Java 8 中的委托相近的概念是函數式接口的概念。
例如,如果您有一個 C# 委托:
delegate void Runnable();
在 Java 中,您將創建一個功能接口,如:
@FunctionalInterface
public interface Runnable {
void run();
}
函數式接口的好處是它們可以很容易地在lambda 表達式中使用。
因此,讓我們假設您有以下課程:
public class SomeClass {
public static void someStaticMethod() {
}
public void someMethod() {
}
}
使用 Java 8,您可以獲得 lambda 表達式。
List<Runnable> queue = new ArrayList<>();
queue.add(() -> someMethod());
queue.add(() -> someStaticMethod());
如果您實際上只是調用一個方法,則有一個簡短的命名方法引用:
List<Runnable> queue = new ArrayList<>();
queue.add(this::someMethod);
queue.add(SomeClass::someStaticMethod);
在 Java 7 中,您唯一可以使用的是匿名類:
List<Runnable> queue = new ArrayList<>();
queue.add(new Runnable() {
public void run() {
someMethod();
}
});
queue.add(new Runnable() {
public void run() {
someStaticMethod();
}
});
我希望這不是太多的信息,所以你仍然可以學習。 ;-) 但是,我喜歡我的回答對查找此問題的其他人也有用。
摘自https://msdn.microsoft.com/en-gb/library/aa288459(v=vs.71).aspx :
C# 中的委托類似於 C 或 C++ 中的函數指針。 使用委托允許程序員在委托對象中封裝對方法的引用。 然后可以將委托對象傳遞給可以調用引用方法的代碼,而不必在編譯時知道將調用哪個方法。 與 C 或 C++ 中的函數指針不同,委托是面向對象的、類型安全的和安全的。
也就是說,Java 沒有像 C# 那樣的委托。 但是,從 Java 8 開始,我們確實通過使用方法引用和函數接口來獲得某種函數指針。
正如您禮貌地要求的那樣,我不會確切地告訴您如何實現此代碼,但是您應該能夠根據這些信息提出解決方案。
java 函數接口 != c# 委托。 從消費者的角度來看,除了純 c 風格的函數指針之外,您將無法獲得任何詳細信息。 您無法判斷 java 函數接口是否將某些對象綁定為 lambda 表達式或成員函數,或者只是具有零依賴關系的靜態方法。 我想說 c# 委托提供了一些非常有趣的功能,可能不是那么重要,以幫助診斷潛在的程序缺陷,例如委托的線程安全性。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.