作者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
1F:推 LaPass:差在可以直接用等号赋值 11/21 09:12
2F:→ LaPass:以及有属於整个语言的共用物件。骨子里是一样的东西。 11/21 09:14
3F:→ LaPass:说错,是标准libary中就有定义这样的东西,不用自己定义。 11/21 09:16
4F:推 popcorny:C#优点应该是语言成面就提供delegate/event..并且提供 11/21 12:06
5F:→ popcorny:+=,-=等方便功能..java无法写得如此简洁 11/21 12:09
6F:→ pzyc79:不太喜欢这种没有必要性的语法 如果是为了安全性还可以接受 11/21 15:11
7F:推 LaPass:主要还是因为有operator override的关系..... 这东西超方便 11/21 15:13
8F:→ LaPass:但可能会让程式变难懂 11/21 15:16
9F:→ pzyc79:运算子多载、指标这些东西就是我看一眼C++就头痛的原因 11/21 15:19
10F:→ pzyc79:命名空间也是 11/21 15:21
11F:→ ssccg:C#的func lang支援是Lambda Expression,不止delegate/event 11/21 19:26
12F:→ ssccg:另外现在有 Func<T, TResult>这种generic type 11/21 19:32
13F:→ ssccg:delegate的type宣告也可以省掉了 11/21 19:35