Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么Java中存在匿名类?_Java_Class_Lambda_Anonymous Class - Fatal编程技术网

为什么Java中存在匿名类?

为什么Java中存在匿名类?,java,class,lambda,anonymous-class,Java,Class,Lambda,Anonymous Class,与普通类相比,匿名类有什么特殊的特性吗?因为我在这些类中没有看到任何特殊的特性 与普通类相比,匿名类有什么特殊功能吗 确实有一个特殊的特性:它们具有闭包的语义,这意味着您可以在它们的声明站点访问作用域中的局部变量。匿名类是具有相同特征的局部类的特例;然而,命名的局部类几乎从未被使用过 与“普通”类相比,匿名类也是内部类,这意味着它们也捕获封闭类的实例(如果在非静态上下文中声明) 总而言之,匿名类是Java类可以拥有的所有特殊功能的结合。当必须发明XxxxxListener的第100个变种时,程序

与普通类相比,匿名类有什么特殊的特性吗?因为我在这些类中没有看到任何特殊的特性

与普通类相比,匿名类有什么特殊功能吗

确实有一个特殊的特性:它们具有闭包的语义,这意味着您可以在它们的声明站点访问作用域中的局部变量。匿名类是具有相同特征的局部类的特例;然而,命名的局部类几乎从未被使用过

与“普通”类相比,匿名类也是内部类,这意味着它们也捕获封闭类的实例(如果在非静态上下文中声明)


总而言之,匿名类是Java类可以拥有的所有特殊功能的结合。

当必须发明XxxxxListener的第100个变种时,程序员可能会很累。小的代码片段是不值得的。这是我个人的看法

IMHO匿名类优于IDE f.e.Delphi中自动生成的名称combo1、combo2、combo3。
疲惫的程序员接受不重要的对象(本地等)的名称,但也非常重要,这是非常糟糕的习惯

我猜是封装和访问。没有别的区别。为什么我们不能在匿名类中声明构造函数?@Santhosh构造函数方法使用它的类名。因为匿名类没有名称,所以它们不能声明构造函数方法。@hata这不是真正的原因,语法总是可以更改以实现我们的目的。真正的原因要简单得多:如果你能定义一个构造函数,你会如何调用它?构造函数只有在您可以显式创建类的实例时才有意义,但实例化匿名类的唯一方法是在定义点,因此根本不需要构造函数。@biziclop感谢您的精彩解释:)
如果在非静态上下文中声明,这一点再强调也不为过。我遇到的99%的anon内部类将不必要地捕获封闭类的实例。大多数时候它是无害的,但有时…这是规范的一个不好的方面。。。他们无条件地捕获它,即使它从未在实现代码中使用过。规范本可以更聪明一些(就像lambda规范一样)。