• java核心学习(七) 内部类、匿名内部类、Lambda表达式


    一、内部类

      内部类是类的一个成员,与成员变量、方法、构造器、初始化块一起构成类的五大成员,关于内部类的各种概念与使用方法注意事项不再赘述(这种东西用到再看,一直都用不到说明根本没用。。)

    二、匿名内部类

      匿名内部类常用于实现方法的参数列表中的抽象类与接口的实例,例如在上一篇(java核心学习(六)面向接口编程)中,Command接口被用于一个方法的参数中,我们可以在调用该方法时实现这个接口,创建匿名内部类的时候同时会创建一个匿名实例,具体代码如下

    public class CommandTest{
        public static void main(String[] args){
            ProcessArray pa = new ProcessArray();
            int[] target = {1,2,3,4};
            pa.process(target , new Command(){
                //实现Command接口的方法
                public void process(int[] target)
                {
                    int sum = 0;
                    for(int tmp : target){
                        sum +=tmp;
                    }
                    System.out.println("数组元素的和是"+sum);
            });
            pa.process(target , new AddCommand());
            }
    }    

      注意:匿名内部类中的变量必须声明是fianl的,在java7之前,如要引用匿名内部类之外的变量则必须声明为final,从java8开始,在匿名内部类中使用之外的变量会隐式转换为final。

    三、Lambda表达式

      Lambda表达式允许用简洁的代码来创建只有一个抽象方法的接口的实例。表面上看起来像是把一段代码当做参数传给了该方法

      用Lambda表达式来改写CommandTest类,就是把接口名 与 方法头给去掉,留下方法的参数列表和方法体,因为接口名在调用的方法参数列表中已经声明过一次,是可以确定的,要实现的方法是唯一的,这两者都可以省略,根据 相同代码只写一次原则,推荐使用Lambda表达式

      

    public class CommandTest{
        public static void main(String[] args){
            ProcessArray pa = new ProcessArray();
            int[] target = {1,2,3,4};
            pa.process(target , (int[] target) -> {
                int sum = 0;
                for(int tmp : target){
                    sum +=tmp;
                }
                System.out.println("数组元素的和是"+sum);
            });
            pa.process(target , new AddCommand());
            }
    }    

      Lambda表达式由三部分组成 分别是 形参列表 箭头 代码块。

      Command接口:这是一种函数式接口,一个接口只含有一个抽象方法,就可被称为函数式接口,Lambda表达式的目标类型必须是函数式接口。函数式接口注解:@FunctionalInterface,用于让编译器检查是否为函数式接口。

      只要目标类型为函数式接口类型的,都可以应用Lambda表达式来创建, 常见的有:赋值、传参、强制类型转换。

  • 相关阅读:
    读取.properties配置文件并保存到另一个.properties文件内
    kafka启动报错:另一个程序正在使用此文件,进程无法访问。
    使用Spring boot 嵌入的tomcat不能启动: Unregistering JMX-exposed beans on shutdown
    java把map转json
    java代码生成xml 报错:HIERARCHY_REQUEST_ERR: 尝试在不允许的位置插入节点。
    查询数据库时mapper报错:It's likely that neither a Result Type nor a Result Map was specified.
    获取session
    Apache服务器运维笔记(2)----使用apxs来进行编译安装 mod_txt 模块
    Apache服务器运维笔记(2)----使用<IfDefine>容器实现不同的配置
    Apache服务器运维笔记(1)----运行多个Apache服务器
  • 原文地址:https://www.cnblogs.com/Theshy/p/7489190.html
Copyright © 2020-2023  润新知