java pasd_Java PASS方法作为参数

c2732e3608dfdc382e1e6340a9e6ac2d.png

POPMUISE

在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表达式的Java教程: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、付费专栏及课程。

余额充值