论坛首页 Java企业应用论坛

JAVA 需要引入闭包吗

浏览 38517 次
该帖已经被评为精华帖
作者 正文
   发表时间:2009-06-11   最后修改:2009-06-11
visitor 写道
night_stalker 写道
visitor 写道

不过内部类是可以访问上下文的
内部类可以访问外部类的属性。。


嗯,我说的不准确,应该改成“内部类没法访问局部变量”...


举个例子。。。
什么局部变量


譬如:
int i = 0;
dialog.addWindowListener(new WindowAdapter(){
  public void windowClosing(WindowEvent e){
    System.exit(i); // 不行,i 得改成 final
  }
});


有闭包后就 ok:
dialog.onWindowClosing((WindowEvent e){ System.exit(i); });

0 请登录后投票
   发表时间:2009-06-11  
night_stalker 写道
visitor 写道
night_stalker 写道
visitor 写道

不过内部类是可以访问上下文的
内部类可以访问外部类的属性。。


嗯,我说的不准确,应该改成“内部类没法访问局部变量”...


举个例子。。。
什么局部变量


譬如:
int i = 0;
dialog.addWindowListener(new WindowAdapter(){
  public void windowClosing(WindowEvent e){
    System.exit(i); // 不行,i 得改成 final
  }
});


有闭包后就 ok:
dialog.onWindowClosing((WindowEvent e){ System.exit(i); });



I know ,就是 在方法里面定义的变量
但只要定义为final 就可以在 内部类访问啊。。
内部类是可以完全模拟闭包的

0 请登录后投票
   发表时间:2009-06-11  
确实简单了很多
好像是 函数 可以作为 参数传入

0 请登录后投票
   发表时间:2009-06-11  
如果真引入闭包,写代码是少了,恐怕调试会更痛苦一点。
0 请登录后投票
   发表时间:2009-06-11  
night_stalker 写道
visitor 写道
night_stalker 写道
visitor 写道

不过内部类是可以访问上下文的
内部类可以访问外部类的属性。。


嗯,我说的不准确,应该改成“内部类没法访问局部变量”...


举个例子。。。
什么局部变量


譬如:
int i = 0;
dialog.addWindowListener(new WindowAdapter(){
  public void windowClosing(WindowEvent e){
    System.exit(i); // 不行,i 得改成 final
  }
});


有闭包后就 ok:
dialog.onWindowClosing((WindowEvent e){ System.exit(i); });



用闭包 代码确实简单了些(因为用了匿名函数,函数作为了 一级元素(把函数作为参数))

(WindowEvent e){ System.exit(i); }


但这不符合 OO 规范

而且你举的例子中的 两段代码并非完全等价

 

 

0 请登录后投票
   发表时间:2009-06-11  
步行者 写道
night_stalker 写道
visitor 写道
night_stalker 写道
visitor 写道

不过内部类是可以访问上下文的
内部类可以访问外部类的属性。。


嗯,我说的不准确,应该改成“内部类没法访问局部变量”...


举个例子。。。
什么局部变量


譬如:
int i = 0;
dialog.addWindowListener(new WindowAdapter(){
  public void windowClosing(WindowEvent e){
    System.exit(i); // 不行,i 得改成 final
  }
});


有闭包后就 ok:
dialog.onWindowClosing((WindowEvent e){ System.exit(i); });



用闭包 代码确实简单了些(因为用了匿名函数,函数作为了 一级元素(把函数作为参数))

 

(WindowEvent e){ System.exit(i); }


但这不符合 OO 规范

而且你举的例子中的 两段代码并非完全等价

 

 

 

 

 

你说的是啥规范。  符合你说的那个规范有什么好处

0 请登录后投票
   发表时间:2009-06-11  
bookong 写道
如果真引入闭包,写代码是少了,恐怕调试会更痛苦一点。

不光这些
1,函数做为一级元素,不光要import类了,还要import函数
或者 就像 python一样 要把 文件粒度改为 module了
2,那JAVA中的一切皆对象,就要被打破了
0 请登录后投票
   发表时间:2009-06-11  
icefishc 写道

 

你说的是啥规范。  符合你说的那个规范有什么好处

 

就是 面向对象 的 规范

好处就是

很容易从 面向对象分析,设计 过度到 面向对象的编程

 

0 请登录后投票
   发表时间:2009-06-11  
这个东西的类型就是: void(WindowEvent),会接受编译期检查。参见 closure 的建议:
http://blogs.sun.com/ahe/resource/closures.pdf

另外 OO 规范是什么 …… 麻烦给个链接。 无论怎么看,都是“函数是对象”更 OO 吧。

bookong 写道
如果真引入闭包,写代码是少了,恐怕调试会更痛苦一点。


说说为什么? 能否举个例子。
0 请登录后投票
   发表时间:2009-06-11  
步行者 写道
不光要import类了,还要import函数


??
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics