Java Lambda表达式与匿名内部类的联系和区别实例分析
2020-02-13 12:33
543 查看
本文实例讲述了Java Lambda表达式与匿名内部类的联系和区别。分享给大家供大家参考,具体如下:
一 点睛
Lambda表达式与匿名内部类存在如下相同点:
- Lambda表达式与匿名内部类一样,都可以直接访问“effectively final”的局部变量,以及外部类的成员变量(包括实例变量和类变量)。
- Lambda表达式创建的对象与匿名内部类生成的对象一样, 都可以直接调用从接口继承得到的默认方法。
Lambda表达式与匿名内部类主要存在如下区别:
- 匿名内部类可以为任意接口创建实例――不管接口包含多少个抽象方法,只要匿名内部类实现所有的抽象方法即可。但Lambda表达式只能为函数式接口创建实例。
- 匿名内部类可以为抽象类、甚至普通类创建实例,但Lambda表达式只能为函数式接口创建实例。
- 匿名内部类实现的抽象方法的方法体允许调用接口中定义的默认方法;但Lambda表达式的代码块不允许调用接口中定义的默认方法。
二 实战
1 代码
@FunctionalInterface interface Displayable { //定义一个抽象方法和默认方法 void display(); default int add(int a,int b) { return a+b; } } public class LambdaAndInner { private int age =15; private static String name="外部类类变量"; public void test() { String book="我是effectively final"; Displayable dis =()-> { //访问 effectively final 的局部变量 System.out.println("book局部变量为:"+book); //访问外部类的类变量和实例变量 System.out.println("外部类的age实例变量为:"+age); System.out.println("外部类的name类变量为:"+name); }; dis.display(); //调用dis对象从接口继承的add方法 System.out.println(dis.add(3,5)); } public static void main(String[] agrs) { LambdaAndInner lambda = new LambdaAndInner(); lambda.test(); } }
2 运行
book局部变量为:我是effectively final
外部类的age实例变量为:15
外部类的name类变量为:外部类类变量
8
更多java相关内容感兴趣的读者可查看本站专题:《Java面向对象程序设计入门与进阶教程》、《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》和《Java缓存操作技巧汇总》
希望本文所述对大家java程序设计有所帮助。
您可能感兴趣的文章:
相关文章推荐
- 08_Lambda表达式与匿名内部类的联系与区别
- Java Lambda表达式和函数式接口实例分析
- Java的匿名内部类与Lambda表达式
- Java Lambda表达式的方法引用和构造器引用实例分析
- Java局部内部类和匿名内部类定义与用法实例分析
- Java Lambda表达式详解和实例
- 函数式编程--lambda表达式对比匿名内部类
- java 匿名内部类 lambda 在多线程中的使用例子
- Java 中静态方法 实例方法 具体方法区别与联系
- java 接口、抽象类、具体类、内部类、匿名内部类的区别及它们之间的关系
- Java实例说明 嵌套类包括内部类(即非静态嵌套类)和静态嵌套类 两者的区别
- java:内部类与外部类的区别和联系
- java匿名内部类实例简析/详解匿名内部类
- Java 8 lambda表达式引入详解及实例
- Java SE8 Lambda 基础入门---lambda表达式与匿名内部类
- Java进阶:接口、lambda表达式与内部类
- Python lambda表达式用法实例分析
- java的单例模式、静态代理模式、简单工厂模式、内部类、Lambda表达式、异常
- Java正则表达式的一个实例分析
- 函数式编程--lambda表达式对比匿名内部类