計算機(jī)二級java輔導(dǎo):閉包能讓JAVA語言變得簡潔嗎?

字號:

眾所周知,JAVA語言一直因其語法上的簡潔優(yōu)雅(JAVA1.5中泛型的引入或多或少改變了這點(diǎn))而被大部分人所喜愛.
    但另一方面,語法上的簡潔也造成了使用上的一些不方便.譬如,你只想實(shí)現(xiàn)往控制臺輸出一個"Hello,world",你也得老老實(shí)實(shí)先寫一個class,然后再寫一個public static void main(String[] args)方法,最后才是System.out.println("Hello,world");而如果使用Python之類的語言,可能只需一行代碼就搞定了.
    當(dāng)然,上面這個例子看起來不是那么有說服力.不過如果你做過GUI開發(fā)的話,你就會感受到"Everything is an object"所帶來的不便之處了.為了監(jiān)聽GUI事件并做出相應(yīng)的反應(yīng),你會大量用到匿名類(而實(shí)際上你的目的只是要傳入一個回調(diào)方法而已),這樣不僅做了一些額外不必要的工作,也給代碼的可讀性造成一定影響.譬如這類的問題還有很多,Stevey寫過一篇文章:名詞的王國(Execution in the Kingdom of Nouns),用形象生動的語言描敘了為什么使用JAVA會讓某些工作變得的啰嗦.他的觀點(diǎn)是由于JAVA中的"everything is an object",在某些時候限制了我們用清晰而合理的表達(dá)方式來表述我們的思想.
    在JAVA誕生以來,語法上的變動可能就是在JAVA 1.5中泛型的引入了.而且隨著JAVA的開源,以后可能會有更多的元素被引入到JAVA語言里面來(官方的或非官方的).目前正在進(jìn)行中的JDK7就有可能增加一些新的語言特性(見javapolis舉行的關(guān)于JAVA7語言特性投票的結(jié)果),其中最重大的改變莫過于閉包的引入了.毫無疑問,這些語言特性的引入都是為了讓我們這些Javaer活的更輕松一些.那么,閉包能改善目前JAVA語言所存在不足嗎?就是說閉包能夠讓我們寫出簡單而易讀的代碼嗎?要知道閉包并不是一個面向?qū)ο蟮臇|東.Bruce Eckel在他的文章Will Closures Make Java Less Verbose里討論了這個問題.并且在文章的末尾,他提出了一個很大膽的想法JAVA 3K(其實(shí)我也一直這么想的^_^):引用我們知道Python有個Python 3000計劃,這個Python 3000相對之前的Python有大幅度的修改,并且不兼容之前的Python語法,這樣可以完全擺脫因考慮向后兼容性而帶來的不必要的負(fù)擔(dān).那么我們?yōu)槭裁匆哺銈€JAVA 3000呢?它與之前的JAVA有著類似的語法,并且也能運(yùn)行在JVM上,但語法上與原有JAVA語言不兼容.在JAVA 3K里面我們可以有真正的泛型,閉包,并且可以丟棄掉int那些基本類型.對于那些想繼續(xù)使用原有JAVA的人來說繼續(xù)用就是了,而程序員想學(xué)習(xí)新的JAVA語言也很容易.