你的公司叫什么?著名IT公司名字的来历 >>
<< 人月神话:软件界面交互和易用性改进总结
关于内部类

Author Zhou Renjian Create@ 2006-07-07 15:43
whizz Note icon
挺有意思的是,我非常支持这些语法!

首先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为什么在桌面程序上从来没有取得过成功――这种语言的设计者多半从来没写过桌面程序;他一点也不清楚,在这个领域,程序员需要的是什么东西。

本记录所在类别:
本记录相关记录: