由于Java8最近发布了,它的全新lambda表达式看起来真的很酷,我想知道这是否意味着我们已经习惯的匿名类的消亡。
Collections.sort(personList, new Comparator<Person>(){
public int compare(Person p1, Person p2){
return p1.firstName.compareTo(p2.firstName);
}
});
Collections.sort(personList, (Person p1, Person p2) -> p1.firstName.compareTo(p2.firstName));
看起来出奇的简洁。所以我的问题是,有没有理由继续在Java8中使用那些类,而不是lambdas?
编辑
同样的问题但是相反的方向,使用Lambdas而不是匿名类有什么好处,既然Lambdas只能与单一方法接口一起使用,那么这个新特性只是一个只在很少情况下使用的快捷方式还是真的有用呢?
匿名内部类(AIC)可用于创建抽象类或具体类的子类。AIC还可以提供接口的具体实现,包括添加状态(字段)。AIC的实例可以在其方法体中使用this
来引用,因此可以对其调用更多的方法,其状态可以随时间变化,等等。这些都不适用于lambda。
我想AIC的大多数用途是提供单个函数的无状态实现,因此可以用lambda表达式替换,但AIC的其他用途不能使用lambda。AIC会留在这里。
更新
AICs和lambda表达式之间的另一个区别是AICs引入了一个新的作用域。也就是说,名称是从AIC的超类和接口解析的,并且可以将出现在词汇封闭环境中的名称隐藏起来。对于lambda,所有名称都是按词法解析的。
一个元素可以按照HTML元素的嵌套方式包含其他元素,大多数情况下,框都是由显式定义的元素所生成的。 然而,当把文本直接添加到一个块容器元素中(不是包含在行内元素)时,即便没有为这些文本显式定义元素,它们也会生成框。 没有被元素显式包含的文本,称作匿名文本,因为没有与之关联的元素。把匿名文本所生成框,称作匿名框。匿名框分为两种,一种是匿名块框,另一种是匿名行内框。 当把文本直接添加到一个块容器元素中
匿名类是指没有类名的内部类,必须在创建时使用 new 语句来声明类。其语法形式如下: 这种形式的 new 语句声明一个新的匿名类,它对一个给定的类进行扩展,或者实现一个给定的接口。使用匿名类可使代码更加简洁、紧凑,模块化程度更高。 匿名类有两种实现方式: 继承一个类,重写其方法。 实现一个接口(可以是多个),实现其方法。 下面通过代码来说明。 程序的输出结果如下: 从输出结果可以看出,匿名内部类有
本文向大家介绍Java匿名类,匿名内部类实例分析,包括了Java匿名类,匿名内部类实例分析的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Java匿名类,匿名内部类。分享给大家供大家参考,具体如下: 内部类 匿名类 首发日期 :2018-03-25 内部类: 在一个类中定义另一个类,这样定义的类称为内部类。【包含内部类的类可以称为内部类的外部类】 如果想要通过一个类来使用另一个类,可以定
可能重复: 什么是双大括号初始化在Java? 在查看一些遗留代码时,我遇到了一些非常令人困惑的问题: 在调试模式下运行代码后,我发现匿名块是在调用构造函数之后调用的。上面的功能和做的有什么不同: ?我会认为它们在功能上是等价的,并且会认为后一种方式是更好/更干净的编写代码的方式。
编译工作正常,但在运行时应用程序崩溃,出现以下错误:。 和缺少了什么?
问题内容: 我想我了解Anonymous类的基础知识,但我想澄清一些内容。当我有这样的语法时 如果匿名类实际上是类A的内部类,如第一个示例所示:理论上,语义正确吗? 到底会发生什么?我认为在编译Java文件时,将为匿名类创建一个.class文件,以便可以对其进行引用(但我找不到它)。当实例化A对象时,它创建一个按钮对象,然后btn调用addActionListener()方法,该方法实际上将类似A
5.6. 匿名函数 拥有函数名的函数只能在包级语法块中被声明,通过函数字面量(function literal),我们可绕过这一限制,在任何表达式中表示一个函数值。函数字面量的语法和函数声明相似,区别在于func关键字后没有函数名。函数值字面量是一种表达式,它的值被成为匿名函数(anonymous function)。 函数字面量允许我们在使用函数时,再定义它。通过这种技巧,我们可以改写之前对st
有没有想过定义一个很短的回调函数,但又不想用 def 的形式去写一个那么长的函数,那么有没有快捷方式呢? 答案是有的。 python 使用 lambda 来创建匿名函数,也就是不再使用 def 语句这样标准的形式定义一个函数。 匿名函数主要有以下特点: lambda 只是一个表达式,函数体比 def 简单很多。 lambda 的主体是一个表达式,而不是一个代码块。仅仅能在 lambda 表达式中封