为了支持Java 8中的lambda表达式,他们引入了Functional Interfaces。

具有单一抽象方法的接口可以称为功能接口。

Runnable,Comparator,Cloneable是功能接口的一些示例。 我们可以使用Lambda表达式实现这些功能接口。

例如:

Thread t =new Thread(new Runnable(){public void run(){System.out.println("Runnable implemented by using Lambda Expression");}
});

这是创建线程的旧方法。

由于Runnable具有单一抽象方法,我们可以将其视为功能接口,并且可以使用如下所示的Lambda表达式。

Thread t = new Thread(()->{System.out.println("Runnable implemented by using Lambda Expression");
});

在这里,我们没有传递Runnable对象,而是传递了lambda表达式。

声明我们自己的功能接口:

我们可以通过限定了S个英格尔一个 bstract M在接口ethod宣布我们自己的功能界面。

public interface FunctionalInterfaceTest{
void display();
}
//Test class to implement above interface
public class FunctionInterfaceTestImpl {public static void main(String[] args){//Old way using anonymous inner classFunctionalInterfaceTest fit = new FunctionalInterfaceTest(){public void display(){System.out.println("Display from old way");}};fit.display();//outputs: Display from old way//Using lambda expressionFunctionalInterfaceTest newWay = () -> {System.out.println("Display from new Lambda Expression");}newWay.display();//outputs : Display from new Lambda Expression}
}

我们可以使用@FunctionalInterface注释进行注释,以告知编译时错误。 它是可选的

例如:

@FunctionalInterface
public interface FunctionalInterfaceTest{void display();void anotherDisplay();//shows an error, FunctionalInterface should have only one abstarct method.
}

默认方法:

功能接口不能具有多个抽象方法,但是可以具有多个默认方法。

Java 8中引入了默认方法,以添加新方法进行接口,而不会干扰已实现的类。

interface DefaultInterfaceTest{void show();default void display(){System.out.println("Default method from interface can have body..!");}
}
public class DefaultInterfaceTestImpl implements DefaultInterfaceTest{public void show(){System.out.println("show method");}//we dont need to provide any implementation to default method.public static void main(String[] args){DefaultInterfaceTest obj = new DefaultInterfaceTestImpl();obj.show();//out puts: show methodobj.display();//outputs : Default method from interface can have body..!}
}

默认方法的主要用途是不强制实现类,我们可以向接口添加方法。

多重继承:

如果两个接口中都存在相同的默认方法,并且一个类正在实现该接口,则它将引发错误。

//Normal interface with show methodinterface Test{default void show(){System.out.println("show from Test");}}//Another interface with same show methodinterface AnotherTest{default void show(){System.out.println("show from Test");}}//Main class to implement above two interfacesclass Main implements Test, AnotherTest{
//here is an ambiguity which show method has to inherit here
}

此类不会编译,因为Test和AnotherTest接口show()方法之间存在歧义,要解决此问题,我们需要将Show()方法覆盖到Main Class。

class Main implements Test, AnotherTest{void show(){System.out.println("Main show method");}}

翻译自: https://www.javacodegeeks.com/2014/05/java-8-functional-interface-example.html

Java 8:功能接口示例相关推荐

  1. java中get接口示例_Java即时类| 带示例的get()方法

    java中get接口示例 即时类的get()方法 (Instant Class get() method) get() method is available in java.time package ...

  2. java中get接口示例_Java LocalDateTime类| 带示例的get()方法

    java中get接口示例 LocalDateTime类的get()方法 (LocalDateTime Class get() method) get() method is available in ...

  3. 【Java 8 新特性】Java 8 时间接口示例:MonthDay、Month、OffsetDateTime 和 OffsetTime

    Java 8 时间接口示例:MonthDay.Month.OffsetDateTime 和 OffsetTime java.time.MonthDay java.time.Month java.tim ...

  4. JNI的替代者—使用JNA访问Java外部功能接口 DLL

    JNI的替代者-使用JNA访问Java外部功能接口 1. JNA简单介绍 先说JNI(Java Native Interface)吧,有过不同语言间通信经历的一般都知道,它允许Java代码和其他语言( ...

  5. java请求接口示例_Java 8:功能接口示例

    java请求接口示例 为了支持Java 8中的lambda表达式,他们引入了Functional Interfaces. 具有单一抽象方法的接口可以称为功能接口. Runnable,Comparato ...

  6. Java 8功能接口–实现Scala类型的随机思维

    在" 使用Scala进行功能编程"课程的一项作业中,引入了一种称为Terrain的类型-Terrain表示一个区域,该区域的某些部分可以访问,而某些部分则不能访问. 因此,以一种非 ...

  7. Java 学习总结(189)—— Java 8 功能接口使用总结

    前言 功能接口是指只有一个抽象方法的接口,功能接口只能有一个抽象方法,但是可以有多个默认方法和静态方法.一个功能接口可以被注解 FunctionalInterface 注释,一旦被 Functiona ...

  8. python2 + django 导出 excel 功能 接口示例代码(做记录)

    需求:接口接口示例(这里是python代码): 主要从 import xlwt 往下是拼接 excel 表格数据代码,前面都是处理数据,不用了解. @login_required @ajax_json ...

  9. java调用第三方接口示例

    引言:在我们开发的过程中,常常会听到或者接触到第三方接口,那么这个第三方接口到底是什么呢? 简单来说就是一个远程接口,不是在你本机上的,你需要通过远程url去访问调用该接口.许多项目中有明确的要求需要 ...

最新文章

  1. 长连接测试_如何选择好一根测试电缆组件?
  2. 【深度学习】基础知识 | 超详细逐步图解 Transformer
  3. hibernate在saveOrUpdate时,update报错:a different object with the same identifier value was already assoc
  4. flutter的按钮如何变为不可选中_如何在Flutter中禁用按钮?
  5. Openfire插件开发
  6. canal java_易用的 canal java 客户端 canal-client
  7. php70w-mbstring,php安装
  8. LeetCode(908)——最小差值 I(JavaScript)
  9. [轉]VS 2010 通过 Architecture创建UML类图设计
  10. C语言程序设计课题分析,C语言程序设计综合实践性教学课题报告.doc
  11. 正点原子STM32F103(精英版)------串行通信
  12. 使用GDAL实现坐标转换
  13. springboot项目启动后执行方法
  14. 揭秘Apple Watch心率监测技术
  15. Java根据模板导出PPT
  16. 如何设计过压保护电路?
  17. Android聊天室(服务器)
  18. H2O中添加算法-模型训练篇
  19. 安徽大学计算机学院张兴义教授,“2018年CCF合肥为新研究生导航” 开启复合型人才培养之路...
  20. 用计算机求函数公式,计算机常用函数公式

热门文章

  1. 日志-周报-月报(2019年2月)
  2. 学生上课睡觉班主任怎么处理_【师问师答】学生上课说话,点名批评还嘴怎么办?...
  3. html为什么未响应,Word2010总是未响应怎么办?
  4. MySQL存储过程+游标+触发器
  5. java序列化深克隆_如何在内存序列化中使用Java深克隆对象
  6. spring 注释_Spring @Value注释
  7. java私有属性和私有方法_Java 9中什么是私有的?
  8. apache.camel_Apache Camel 2.20发布–新增功能
  9. tibco汉化包6.3.0_TIBCO BusinessWorks 6和Container Edition与BW5的比较
  10. 代理模式和动态代理模式_代理模式介绍