java-方法引用

方法引用-通过super引用父类得成员方法

Calcable

package com.atguigu;

@FunctionalInterface
public interface Calcable {
    public abstract void greet();
}

Human

package com.atguigu;

public class Human {
    public void sayHello(){
        System.out.println("这是父类方法");
    }
}

Man

package com.atguigu;

public class Man extends Human{
    @Override
    public void sayHello() {
        System.out.println("这是子类方法");
    }

    public void method(Calcable c){
        c.greet();
    }
    public void show(){
        method(super::sayHello);//方法引用
    }

    public static void main(String[] args) {
        new Man().show();
    }
}

方法引用-通过this引用本类得成员方法

Richable

package com.ithuima;

@FunctionalInterface
public interface Richable {
    public abstract void buy();
}

Husband

package com.ithuima;

public class Husband {
    public void buyHouse(){
        System.out.println("北京买房");
    }
    public void marr(Richable r){
        r.buy();
    }
    public void soHappy(){
        marr(this::buyHouse);
    }

    public static void main(String[] args) {
        new Husband().soHappy();
    }
}

方法引用-类的构造器(构造方法)引用

PersonBuilder

package com.atgu;
@FunctionalInterface
public interface PersonBuilder {
    Person builderPerson(String name);
}

Demo01

package com.atgu;

public class Demo01 {
    public static void printName(String name,PersonBuilder p){
        Person person =p.builderPerson(name);
        System.out.println(person.getName());
    }

    public static void main(String[] args) {
        printName("哈",Person::new);//使用Person类得带参构造方法,通过传递姓名创建对象
    }
}

方法引用-数组得构造器引用

ArrayBuilder

package com.ArrayMethod;
@FunctionalInterface
public interface ArrayBuilder {
    int[] builderArray(int length);
}

Demo

package com.ArrayMethod;

        import java.util.ArrayList;

public class Demo {
    public static int[] createArray(int length, ArrayBuilder ab){
        return ab.builderArray(length);
    }

    public static void main(String[] args) {
        int[] arr2 =createArray(4,int[]::new);
        System.out.println(arr2.length);
    }
}

方法引用-通过类名引用静态成员方法

Calcable

package com.StaticMethod;
@FunctionalInterface
public interface Calcable {
    int calsAbs(int number);
}

Demo

package com.StaticMethod;

public class Demo {
    public static int method(int number,Calcable c){
       return c.calsAbs(number);
    }

    public static void main(String[] args) {
        int method = method(-10, Math::abs);
        System.out.println(method);
    }
}

方法引用-通过对象名引用成员方法

Printable

package com.ObjectMethod;
@FunctionalInterface
public interface Printable {
    void print(String s);
}

MethodRerObject

package com.ObjectMethod;

public class MethodRerObject {
    public void printUpperCaseString(String str){
        System.out.println(str.toUpperCase());
    }
}

Demo

package com.ObjectMethod;

public class Demo {
    public static void printString(Printable p){
        p.print("Hello");
    }

    public static void main(String[] args) {
        MethodRerObject obj =new MethodRerObject();
        printString(obj::printUpperCaseString);
    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值