关于内部类
Author
Zhou Renjian
Create@
2006-07-07 15:43
挺有意思的是,我非常支持这些语法!
首先Eclipse JDT提供的"content assist"能够非常快速的完成上述代码;
其次Eclipse JDT提供的Java编辑器也能够非常有效地实现阅读其中的代码结构(包括内部类对外部类的属性以及方法的引用关系);
还有编译出来的Java字节码不会因为内部类而有性能上的损失;
如果不用这些内部类,你需要花更多的时间处理传递对象和属性值;
要不尝试一下不用内部类,该如何复杂地传递"text", "display", "id", "done"等变量?
对Java语法的几句牢骚
楼主给的例子是:
今后,如果再有人向我推介内部类的种种好处,我会让他看过下面的代码再说话。
public class Snippet130 {
atic void main(String[] args) {
...
Button b = new Button(shell, SWT.PUSH);
b.setText("invoke long running job");
b.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
Runnable longJob = new Runnable() {
boolean done = false;
int id;
public void run() {
Thread thread = new Thread(new Runnable() {
public void run() {
id = nextId[0]++;
display.syncExec(new Runnable() {
public void run() {
if (text.isDisposed()) return;
text.append("\nStart long running task "+id);
}
});
for (int i = 0; i < 100000; i++) {
if (display.isDisposed()) return;
System.out.println("do task that takes a long time in a separate thread "+id);
}
if (display.isDisposed()) return;
display.syncExec(new Runnable() {
public void run() {
if (text.isDisposed()) return;
text.append("\nCompleted long running task "+id);
}
});
done = true;
display.wake();
}
});
thread.start();
while (!done && !shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
}
};
BusyIndicator.showWhile(display, longJob);
}
});
shell.setSize(250, 150);
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
display.dispose();
}
}
这段代码不是来自我,而是Eclipse.org上一段例子程序。
我不怪这位程序员把代码写成这样。本来并不复杂的逻辑,只是为了适应语言的要求,硬是被扭曲成了这种样子。
在我学习过的所有计算机语言里面,还没有哪种语言的特性能够像内部类一样,让我感到如此的恶心。多少也有点明白了为什么Java为什么在桌面程序上从来没有取得过成功――这种语言的设计者多半从来没写过桌面程序;他一点也不清楚,在这个领域,程序员需要的是什么东西。