java 8 函数式接口 记录帖

留给自己忘记时快速回忆!

 

函数式接口

函数式接口(Functional Interface)就是一个有且仅有一个抽象方法,但是可以有多个非抽象方法的接口。

可以用@FunctionalInterface注解表示一个函数式接口

函数式接口可以被隐式转换为 lambda 表达式。

其实就是一个函数约束,它的具体过程必须严格按照这个约束的入参出参来实现。

 

函数式接口的实例化

FunctionalInterface是一个函数式接口,如下(可以看到就是定义了一个入参String出参String的方法hello而已):

@FunctionalInterface
public interface FunctionalInterface {
	
	public String hello(String name);

}

FunctionalInterface很多种实例化方式,实例化时便可以实现其具体的函数过程。以下是其中的两种:

1 用lamda实例化:

FunctionalInterface f = name -> "hello " + name;

用lamda实现了hello方法。

2 用::(方法引用)实例化:

::访问具体的类,将该类的方法赋值给左侧的函数式接口,即等号左侧是函数式接口实例,等号右侧是该实例的函数过程。

FunctionalInterface f = SomeClass::hello;

SomeClass如下:

public class SomeClass {

    public static String hello(String name) {
        return "hello " + name;
    }

}

但需注意SomeClass的hello方法入参必须是String,出参必须是String,即与函数式接口的约束定义一致。

 

 

java.util.function

java.util.function 它包含了很多类,用来支持 Java的 函数式编程,所以一般也可以不自己写函数式接口,用它提供的类就可以了。

 

函数式接口可以被当做方法的参数

有一个方法如下:

public static <T, R> void call(T t, Function<T, R> f) {
	System.out.println(f.apply(t));
}

可以看到该方法传入一个泛型T和一个函数式接口Function(java.util.function.Function<T, R>),然后打印函数式接口Function的apply结果,其apply具体的执行过程是由我们传入的Function<T, R> f的这个f实例定义的。如下:

FunctionalInterface f1 = SomeClass::hello;(SomeClass如上文定义)

FunctionalInterface f2 = name -> "bye " + name;

call("world", f1);

call("world", f2);

 

总结

自己感觉其实函数式接口本质思想还是java接口的那一套,只不过简化了很多。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值