Java關閉規範的當前狀態是什麼?Java關閉類型,變量,數組和集合
在建議的Java規範封閉,我們將能夠 創建倒閉的數組或集合?
如果是這樣,這個語法是可能的嗎?{int x, int y => boolean b}[] comparisonSwitch = { {int i, int j => return i>j}, {int i, int j => return j<i}, {int i, int j => return j==i} } boolean compare(int acase, int a, int b){ return comparisonSwitch[acase].invoke(a,b); }
將正常方法視爲非匿名閉包嗎?
那麼下面的語法是可能的嗎?public class Asdf { public boolean gt(int x, int y){ return x>y; } public boolean lt(int x, int y){ return x<y; } public boolean eq(int x, int y){ return x==y; } {int x, int y => boolean b} GT = gt; {int x, int y => boolean b}[] comparisonSwitch = { gt, lt, eq } }
即,封閉和方法是可操作地互換嗎?
會允許以下語法嗎?// declare a method that has a closure type as an argument void closurator({String s => int a} findlen){ // do whatever } String s = "hello"; void useClosurator(){ // invoke the method by supplying a non-anonymous method // of an object closurator(s.indexOf(String ss)); }
我們將如何能夠在界面中指定閉包類型?
我們能否做到以下幾點,有效地聲明方法的最終/常量引用。interface Closuration { public class Asdf { static public boolean gt(int x, int y){ return x>y; } static public boolean lt(int x, int y){ return x<y; } static public boolean eq(int x, int y){ return x==y; } } {int x, int y => boolean b}[] comparisonSwitch = { Asdf.gt, Asdf.lt, Asdf.eq }; }
由於關閉將訪問代碼空間,就像反射會,會用封閉減慢程序的性能?如果不是,是否意味着通過借用「封閉技術」所取得的進展來加速反思?
插入了新的問題: 事實上,將關閉代碼是代碼空間或可變堆的一部分,因爲我預測,封閉代碼都可能會受到垃圾收集被擦去,對不對?
我可以請求您關注問題的要點,而不是示例代碼中的任何語法錯誤/拼寫錯誤/缺少關鍵字。任何錯誤/錯誤,請糾正它們給我。謝謝。
如果你們中的任何一位有點太急於將此問題作爲「不是真正的問題」來解決,請閱讀我的自我評論http://stackoverflow.com/questions/2198734/demonstrate-prove-that -heap-sort-is-on-log2n-time-closed:這不是作業。 50歲的古老程序員需要一些誠實的幫助來做出一些戰略決策。 – 2010-02-07 07:53:06
這個關於Neal Gafter的封閉提案的問題,還是目前正在討論的lambda? – 2010-02-07 12:03:53
正在編寫當前的Project Lambda:Java語言規範草案0.1 http://mail.openjdk.java.net/pipermail/lambda-dev/attachments/20100122/3764c21a/attachment.txt 0.2版。 – 2010-02-07 12:08:34