看板 java 關於我們 聯絡資訊
※ 引述《LaPass (LaPass)》之銘言: : → PsMonkey:EL 讓你可以在 Java 上頭寫 dynamic type language 11/20 15:27 : → PsMonkey:Scala 可以讓你在 Java 上頭寫 funcational language 11/20 15:28 : → PsMonkey:你說普通,那放大絕:所有東西都輸出成 0 跟 1 超無趣 11/20 15:29 : → lovdkkkk:可以把 function 放到陣列裡面之類的... 11/20 15:33 : → lovdkkkk:coding_time/3, compiling_time*3 這樣 11/20 15:35 : 推 LaPass:我自己是寫個統一的介面去處理這種問題....所以感覺沒差... 11/20 15:38 : 之前剛從C#轉到JAVA的時候,找過類似delegate之類的東西 : 在C#中,可以把一個Method存進delegate變數中來用 : 在java中沒這種東西 : 那時候就想找替代方法去做到這件事 //宣告委派型別,等效C# : delegate void Delegate(string str); class Delegate<T extends Event> { private List<T> Events = new ArrayList<T>(); public void invoke(String str) { for (int i = 0; i < Events.size(); i++) { Events.get(i).onEvent(str); } } public void addEvent(T f) { Events.add(f); } public void removeEvent(T f) { Events.remove(f); } } interface Event { public void onEvent(String str); } //定義一個符合委派型別的簽名方法 class Message implements Event{ String msg; public Message(String str) { msg = str; } public void onEvent(String str) { System.out.println(msg + " " + str + "!"); } } //main public class Test { public static void main(String[] args) { Delegate<Event> d = new Delegate<Event>(); Event hello = new Message("Hello"); Event bye = new Message("Good-bye"); d.addEvent(hello); d.addEvent(bye); d.invoke("Tom"); } } 這跟GUI的Listener機制不是一模一樣嗎 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.168.164.58
LaPass:差在可以直接用等號賦值 11/21 09:12
LaPass:以及有屬於整個語言的共用物件。骨子裡是一樣的東西。 11/21 09:14
LaPass:說錯,是標準libary中就有定義這樣的東西,不用自己定義。 11/21 09:16
popcorny:C#優點應該是語言成面就提供delegate/event..並且提供 11/21 12:06
popcorny:+=,-=等方便功能..java無法寫得如此簡潔 11/21 12:09
pzyc79:不太喜歡這種沒有必要性的語法 如果是為了安全性還可以接受 11/21 15:11
LaPass:主要還是因為有operator override的關係..... 這東西超方便 11/21 15:13
LaPass:但可能會讓程式變難懂 11/21 15:16
pzyc79:運算子多載、指標這些東西就是我看一眼C++就頭痛的原因 11/21 15:19
pzyc79:命名空間也是 11/21 15:21
ssccg:C#的func lang支援是Lambda Expression,不止delegate/event 11/21 19:26
ssccg:另外現在有 Func<T, TResult>這種generic type 11/21 19:32
ssccg:delegate的type宣告也可以省掉了 11/21 19:35