作者pzyc79 (五薀皆空)
看板java
標題Re: [新聞] Twitter 改用 Java/Scala 之後...
時間Wed Nov 21 02:58:02 2012
※ 引述《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