Java新特性之函数式接口

什么是函数式接口

  Functional Interface,顾名思义就是函数式接口。它有以下特征:

  • 一个有且仅有一个抽象方法。
  • @FunctionalInterface
    注解的接口声明是函数式接口,例如 java.lang.Runnable
    , java.util.concurrent.Callable
    , java.util.function.*
  • 默认方法和静态方法对函数式接口不影响。

为什么要函数式接口

  为了让现有的功能与Lmabdas表达式有很好的兼容,不受非抽象函数的影响,和将接口(匿名内部类)隐式转为Lambda表达式。例如 java.lang.Runnable
接口。

怎么样使用函数式接口

Service.java

@FunctionalInterface
public interface Service {
	/***
	 * 抽象方法
	 */
	public abstract void create();
	
	/***
	 * 静态方法:必须有方法体,实现着可以覆盖
	 * @param pid
	 */
	public static void delete(int pid) {};
	
	/***
	 * 默认方法:必须有方法体,实现着可以覆盖
	 */
	public default void update() {};
	
	/**
	 * 默认方法:必须有方法体,实现着可以覆盖
	 * @param pid
	 */
	public default void get(int pid) {};
}

Server.java

public class Server implements Service {

	private Service service;

	public Server(Service service) {
		this.service = service;
	};

	public void start() {
		this.service.create();
	};

	public void restart() {
		if (service != null) {
			this.service.create();
		} else {
			this.service.create();
		}
	};

	public void update() {
		this.service.update();
	};

	public void stop(int pid) {
		Service.delete(pid);
	}

	@Override
	public void create() {
		if (service != null) {
			service.create();
		}
	};
}

Test.java

public class Test {
	public static void main(String[] args) {
		// 使用函数接口的匿名内部类
		new Server(new Service() {
			@Override
			public void create() {
				System.out.println("start");
			}
		}).start();
		
		// 实际隐藏式转化为以下Lambda表达式
		new Server(() -> {
			System.out.println("restart");
		}).restart();
	}
}

参考文献

【译】Java 8的新特性—终极版

Java 8 新特性

Java 8新特性终极指南

原文 

https://www.huangdayu.cn/2019/04/10/Java新特性之函数式接口/

本站部分文章源于互联网,本着传播知识、有益学习和研究的目的进行的转载,为网友免费提供。如有著作权人或出版方提出异议,本站将立即删除。如果您对文章转载有任何疑问请告之我们,以便我们及时纠正。

PS:推荐一个微信公众号: askHarries 或者qq群:474807195,里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多

转载请注明原文出处:Harries Blog™ » Java新特性之函数式接口

赞 (0)
分享到:更多 ()

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址