Re: [新聞] Twitter 改用 Java/Scala 之後...

看板java作者 (五薀皆空)時間13年前 (2012/11/21 02:58), 編輯推噓3(3010)
留言13則, 4人參與, 最新討論串3/4 (看更多)
※ 引述《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

11/21 09:12, , 1F
差在可以直接用等號賦值
11/21 09:12, 1F

11/21 09:14, , 2F
以及有屬於整個語言的共用物件。骨子裡是一樣的東西。
11/21 09:14, 2F

11/21 09:16, , 3F
說錯,是標準libary中就有定義這樣的東西,不用自己定義。
11/21 09:16, 3F

11/21 12:06, , 4F
C#優點應該是語言成面就提供delegate/event..並且提供
11/21 12:06, 4F

11/21 12:09, , 5F
+=,-=等方便功能..java無法寫得如此簡潔
11/21 12:09, 5F

11/21 15:11, , 6F
不太喜歡這種沒有必要性的語法 如果是為了安全性還可以接受
11/21 15:11, 6F

11/21 15:13, , 7F
主要還是因為有operator override的關係..... 這東西超方便
11/21 15:13, 7F

11/21 15:16, , 8F
但可能會讓程式變難懂
11/21 15:16, 8F

11/21 15:19, , 9F
運算子多載、指標這些東西就是我看一眼C++就頭痛的原因
11/21 15:19, 9F

11/21 15:21, , 10F
命名空間也是
11/21 15:21, 10F

11/21 19:26, , 11F
C#的func lang支援是Lambda Expression,不止delegate/event
11/21 19:26, 11F

11/21 19:32, , 12F
另外現在有 Func<T, TResult>這種generic type
11/21 19:32, 12F

11/21 19:35, , 13F
delegate的type宣告也可以省掉了
11/21 19:35, 13F
文章代碼(AID): #1GgzA-cR (java)
討論串 (同標題文章)
文章代碼(AID): #1GgzA-cR (java)