函数式编程@FunctionalInterface

函数式接口是Java8对java8对一类特殊类型的接口的称呼.这类接口定义了唯一的抽象方法的接口.函数式接口代表一种契约,一种对某个特定函数类型的契约.在它出现的地方,实际期望一个符合契约要求的函数.这个注解主要用于编译器错误检查,加上该注解后,当写的接口不符合函数式接口定义的时候会报错

JDK8之前已有的函数式接口

java.lang.Runnable

java.util.concurrent.Callable

java.security.PrivilegedAction

java.util.Comparator

java.io.FileFilter

java.nio.file.PathMatcher

java.lang.reflect.InvocationHandler

java.beans.PropertyChangeListener

java.awt.event.ActionListener

javax.swing.event.ChangeListener

java8新定义的函数式接口

Predicate -- 传入一个参数,返回一个bool结果, 方法为boolean test(T t)

Consumer -- 传入一个参数,无返回值,纯消费。 方法为void accept(T t)

Function -- 传入一个参数,返回一个结果,方法为R apply(T t)

Supplier -- 无参数传入,返回一个结果,方法为T get()

UnaryOperator -- 一元操作符, 继承Function,传入参数的类型和返回类型相同。

BinaryOperator -- 二元操作符, 传入的两个参数的类型和返回类型相同, 继承BiFunction

用法

函数式接口可以额外定义多个抽象方法,但是这些抽象方法签名必须和Object的public方法一样.为什么要这样规定呢?原因在于接口最终都有确定的类实现而类的最终父类是Object.因此函数式接口可以定义Object的public方法

@FunctionalInterface
public interface ObjectMethodFunctionalInterface {
    void count(int i);

    String toString();

    int hashCode();

    boolean equals(Object o);
}

示例

@FunctionalInterface
interface FunctionalException {
    void apply(int i) throws Exception;
}

public class FunctionalTest {
    public static void main(String[] args) {
        FunctionalException functionalInterface = i -> {
            System.out.println("apply");
        };
        try {
            functionalInterface.apply(10);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值