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

一、内部类

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

二、匿名内部类

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

public classCommandTest{public static voidmain(String[] args){

ProcessArray pa= newProcessArray();int[] target = {1,2,3,4};

pa.process(target ,newCommand(){//实现Command接口的方法

public void process(int[] target)

{int sum = 0;for(inttmp : target){

sum+=tmp;

}

System.out.println("数组元素的和是"+sum);

});

pa.process(target ,newAddCommand());

}

}

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

三、Lambda表达式

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

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

public classCommandTest{public static voidmain(String[] args){

ProcessArray pa= newProcessArray();int[] target = {1,2,3,4};

pa.process(target , (int[] target) ->{int sum = 0;for(inttmp : target){

sum+=tmp;

}

System.out.println("数组元素的和是"+sum);

});

pa.process(target ,newAddCommand());

}

}

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

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值