java pasd_Java PASS方法作为参数

在Java 8中,现在可以更容易地使用Lambda表达式和方法参考。首先,一些背景:函数接口是一个只有一个抽象方法的接口,尽管它可以包含任意数量的默认方法(Java 8中的新版本)和静态方法。lambda表达式可以快速实现抽象方法,如果不使用lambda表达式,则不需要所有不必要的语法。

没有lambda表达式:obj.aMethod(new AFunctionalInterface() {

@Override

public boolean anotherMethod(int i)

{

return i == 982

}});

带有lambda表达式:obj.aMethod(i -> i == 982);Lambda表达式的语法

lambda表达式由以下内容组成:括号内用逗号分隔的形式参数列表。test方法包含一个参数p,它表示Person类的一个实例。

注:可以省略lambda表达式中参数的数据类型。此外,如果只有一个参数,则可以省略括号。例如,以下lambda表达式也是有效的:p -> p.getGender() == Person.Sex.MALE

&& p.getAge() >= 18

&& p.getAge() <= 25

箭符,->

主体,由单个表达式或语句块组成。此示例使用以下表达式:p.getGender() == Person.Sex.MALE

&& p.getAge() >= 18

&& p.getAge() <= 25

如果指定一个表达式,则Java运行时计算该表达式,然后返回其值。或者,您可以使用返回语句:p -> {

return p.getGender() == Person.Sex.MALE        && p.getAge() >= 18

&& p.getAge() <= 25;}

返回语句不是表达式;在lambda表达式中,必须将语句括在大括号({})中。但是,不必将空方法调用包含在大括号中。例如,以下是一个有效的lambda表达式:email -> System.out.println(email)

注意,lambda表达式看起来很像方法声明;您可以将lambda表达式看作匿名方法-没有名称的方法。

下面是如何使用lambda表达式“传递方法”:interface I {

public void myMethod(Component component);}class A {

public void changeColor(Component component) {

// code here

}

public void changeSize(Component component) {

// code here

}}class B {

public void setAllComponents(Component[] myComponentArray, I myMethodsInterface) {

for(Component leaf : myComponentArray) {

if(leaf instanceof Container) { // recursive call if Container

Container node = (Container)leaf;

setAllComponents(node.getComponents(), myMethodInterface);

} // end if node

myMethodsInterface.myMethod(leaf);

} // end looping through components

}}class C {

A a = new A();

B b = new B();

public C() {

b.setAllComponents(this.getComponents(), component -> a.changeColor(component));

b.setAllComponents(this.getComponents(), component -> a.changeSize(component));

}}

班级,等级C如果使用以下方法引用,甚至可以进一步缩短:class C {

A a = new A();

B b = new B();

public C() {

b.setAllComponents(this.getComponents(), a::changeColor);

b.setAllComponents(this.getComponents(), a::changeSize);

}}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值