JAVA8 函数式接口介绍
来源:互联网 发布:用excel做数据统计 编辑:程序博客网 时间:2024/06/06 00:27
1.JAVA8之前
相信你见过或使用过如下接口:java.lang.runnable,java.awt.event.actionlistener,java.util.comparator,java.util.concurrent.callable。
这些接口有一个共同特性,接口中只声明一个方法,这些接口也称为单个抽象方法接口( Single Abstract Method interfaces)。其中一种流行的做法是使用这些接口创建匿名内部类,比如:
public class AnonymousInnerClassTest { public static void main(String[] args) { new Thread(new Runnable() { @Override public void run() { System.out.println("A thread created and running ..."); } }).start(); }}
public interface Runnable { public abstract void run();}
2.在JAVA8中,单个抽象方法接口 被重建(标注注解@FunctionalInterface)并称为 函数式接口。
例1:
@FunctionalInterfacepublic interface Runnable { public abstract void run();}
例2:自己创建的 函数式接口
@FunctionalInterfacepublic interface SimpleFuncInterface { public void doWork();}
一旦在接口中再声明一个抽象方法,编译就会报错。
但在接口中可以声明java.lang.Object中的 抽象方法。
@FunctionalInterfacepublic interface SimpleFuncInterface { public void doWork(); public String toString(); public boolean equals(Object o);}
一个函数式接口中 可以有一个抽象方法 和 任意数量的默认方法。
@FunctionalInterfacepublic interface SimpleFuncInterface { public void doWork(); default public void doSomeWork() { System.out.println("doSomeWork方法 接口实现"); } default public void doSomeOtherWork() { System.out.println("doSomeOtherWork方法 接口实现"); }}
关于默认方法:在不破坏现有代码的情况下开发接口的方法。
public class SimpleInterfaceImpl implements SimpleFuncInterface{ @Override public void doWork() { System.out.println("Do Some Work implementation in the class"); } @Override public void doSomeWork() { System.out.println("doSomeWork方法重写实现"); } /* * 默认方法 也可以不重写实现 。doSomeOtherWork没有重写。 */ public static void main(String[] args) { SimpleInterfaceImpl simpObj = new SimpleInterfaceImpl(); simpObj.doWork(); simpObj.doSomeWork(); simpObj.doSomeOtherWork(); }}
3.函数式接口可以用lambda表达式表示
例:使用lambda表达式 代替 匿名内部类
public class SimpleFunInterfaceTest { public static void main(String[] args) { // 使用匿名内部类 carryOutWork(new SimpleFuncInterface() { @Override public void doWork() { System.out.println("Do work in SimpleFun impl..."); } }); // 使用lambda表达式 carryOutWork(() -> System.out.println("Do work in lambda exp impl...")); } public static void carryOutWork(SimpleFuncInterface sfi){ sfi.doWork(); }}
备注:原文地址https://sanaulla.info/2013/03/21/introduction-to-functional-interfaces-a-concept-recreated-in-java-8/
看着百度翻译理解的,仅供参考。。。
阅读全文
0 0
- JAVA8 函数式接口介绍
- Java8:函数式接口
- java8特性介绍之-接口函数
- java8内置函数式接口
- Java8内置函数式接口
- Java8之函数式接口
- java8提供的简单函数式接口
- java8 四个核心函数式接口
- java8:@FunctionalInterface函数式接口注解
- Java8新特性函数式接口
- Java8中的函数式接口及使用
- Java8的四大核心函数式接口
- java8 函数式接口(FunctionalInterface) [一]
- java8 函数式接口(FunctionalInterface) [二]
- Java8 新特性 函数式接口
- 深入学习java8二(函数式接口)
- Java8的四大核心函数式接口
- Java8自定义带泛型的函数式接口
- 关于jsp页面表格表头固定,随着下拉条表头移动
- 跨场景不销毁
- 在tomcat中部署web应用
- python linux下日志,报错函数模版
- ros_indigo机器视觉
- JAVA8 函数式接口介绍
- Linux学习笔记_系统分区信息,磁盘空间及inode占用查看(df,fdisk)
- linux下搭建基于Eclipse的arm的开发环境
- ACCU天气API以及Okhttp、Retrofit、RxJava的使用
- 重新拾起java(慕课网学习内容)
- jQuery点击网页任意空白区域隐藏div
- Java学习笔记(一)——Java介绍
- Docker安装配置tomcat,jdk
- C++ USBXPRESS程序开发