四大接口

四大接口

1.函数式接口

//在这定义一个口罩的类
package one.more.study;

/**
 * 口罩
 */
public class Mask {
    public Mask(String brand, String type) {
        this.brand = brand;
        this.type = type;
    }
    /**
     * 品牌
     */
    private String brand;
    /**
     * 类型
     */
    private String type;

    public String getBrand() {
        return brand;
    }

    public void setBrand(String brand) {
        this.brand = brand;
    }

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }
}

1.Supplier接口

//suppier接口是对象实例的提供者,定义了一个叫名叫get的抽象方法
package java.util.function;

@FunctionalInterface
public interface Supplier<T> {
    T get();
}

2.Consumer接口

//Consumer接口是一个类似消费者的接口,定义了一个名叫accept的抽象方法,它的入参是一个泛型T对象,没有任何返回(void)
package java.util.function;

@FunctionalInterface
public interface Consumer<T> {
    void accept(T t);
}

3.Predicate接口

//Predicate接口是判断是与否的接口,定义了一个名叫test的抽象方法,它的入参是一个泛型T对象,并返回一个boolean类型
package java.util.function;

@FunctionalInterface
public interface Predicate<T> {
    boolean test(T t);
}

4.Function接口

//Function接口是对实例进行处理转换的接口,定义了一个名叫apply的抽象方法,它的入参是一个泛型T对象,并返回一个泛型T对象
package java.util.function;

@FunctionalInterface
public interface Function<T, R> {
    R apply(T t);
}

//测试方法


 public static void main(String[] args) {

        //Function接口(提供对象实例)
        System.out.println("--------------------------Function接口----------------------------");
        Supplier<Mask> supplier = () -> new Mask("3M", "N95");
        Mask mask = supplier.get();
        System.out.println("Brand: " + mask.getBrand() + ", Type: " + mask.getType());

        //Consumer接口(消耗对象实例)
        System.out.println("--------------------------Consumer接口----------------------------");
        Consumer<Mask> consumer = (Mask mask1) -> {
            System.out.println("Brand: " + mask1.getBrand() + ", Type: " + mask1.getType());
        };
        consumer.accept(supplier.get());


        //Predicate接口
        System.out.println("--------------------------Predicate接口----------------------------");
        Predicate<Mask> n95 = (Mask mask2) -> "N95".equals(mask2.getType());
        Predicate<Mask> kn95 = (Mask mask3) -> "KN95".equals(mask3.getType());
        System.out.println("是否为N95口罩:" + n95.test(supplier.get()));
        System.out.println("是否为KN95口罩:" + kn95.test(supplier.get()));

        //Function接口
        System.out.println("--------------------------Function接口----------------------------");
        Function<Mask, String> brand = (Mask mask4) -> mask4.getBrand();
        Function<Mask, String> type = (Mask mask5) -> mask5.getType();
        System.out.println("口罩品牌:" + brand.apply(supplier.get()));
        System.out.println("口罩类型:" + type.apply(supplier.get()));



    }

测试结果:

--------------------------Function接口----------------------------
Brand: 3M, Type: N95
--------------------------Consumer接口----------------------------
Brand: 3M, Type: N95
--------------------------Predicate接口----------------------------
是否为N95口罩:true
是否为KN95口罩:false
--------------------------Function接口----------------------------
口罩品牌:3M
口罩类型:N95

2.相关注解的使用

1.函数式接口@FunctionalInterface的使用说明

在这里插入图片描述

在这里插入图片描述

通过JDK8源码javadoc,可以知道这个注解有以下特点:
	1、该注解只能标记在"有且仅有一个抽象方法"的接口上。
	2、JDK8接口中的静态方法和默认方法,都不算是抽象方法。
	3、接口默认继承java.lang.Object,所以如果接口显示声明覆盖了Object中方法,那么也不算抽象方法。	
	4、该注解不是必须的,如果一个接口符合"函数式接口"定义,那么加不加该注解都没有影响。加上该注解能够更好地让	编译器进行检查。如果编写的不是函数式接口,但是加上了@FunctionInterface,那么编译器会报错。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值