• 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表达式来创建, 常见的有:赋值、传参、强制类型转换。

  • 相关阅读:
    18种典型算法
    幂法和反幂法
    关于Ubuntu下安装Win8和Win8下安装Ubuntu的注意事项
    静态链接库与动态链接库
    面向对象系列二(封装)
    基于ASP.NET WPF技术及MVP模式实战太平人寿客户管理项目开发(Repository模式)
    不要对终于用户谈云
    cocos2d-x 3.0 创建项目
    Android OpenGL ES 画球体
    设计模式 适配器模式 以手机充电器为例
  • 原文地址:https://www.cnblogs.com/Theshy/p/7489190.html
Copyright © 2020-2023  润新知