定义

首先,我们先看看函数接口在《Java语言规范》中是怎么定义的:

函数接口是一种只有一个抽象方法(除Object中的方法之外)的接口,因此代表一种单一函数契约。函数接口的抽象方法可以是从超级接口继承而来,但继承而来的方法应该是覆写等效的( override-equivalent ),这种情况,在逻辑上,代表一个方法。

创建函数接口实例,除了以声明和实例化类的形式这种常规过程之外,还可以使用方法引用表达式和lambda表达式创建函数接口的实例。

声明函数接口时,除了要声明一个抽象方法,还可以声明覆写Object类中的public方法以及default方法。

以下举例说明:

示例一:最常见的函数接口形式

package org.springmorning.demo.javabase.annotation.pre;

/**
* @author 春晨
* @date 2019/1/20 19:59
* Copyright 2019 春晨 https://www.cnblogs.com/springmorning/p/10296022.html
*
* @Description 最常见的函数接口形式:只声明了一个抽象方法
*/ public interface Job {
void execute();
}

示例二:最常见的泛型函数接口形式

package org.springmorning.demo.javabase.annotation.pre;

/**
* @author 春晨
* @date 2019/1/20 21:13
* Copyright 2019 春晨 https://www.cnblogs.com/springmorning/p/10296022.html
*
* @Description 最常见的泛型函数接口形式:只声明了一个抽象方法
*/
public interface Work<T> {
T doWork(Object o);
}

示例三:只包含覆写Object的公共方法的接口,不属于函数接口

package org.springmorning.demo.javabase.annotation.pre;

/**
* @author 春晨
* @date 2019/1/20 20:16
* Copyright 2019 春晨 https://www.cnblogs.com/springmorning/p/10296022.html
*
* @Description 覆写Object的equals方法,不属于函数接口
*/
public interface NonFunctionInterface {
boolean equals(Object obj);
}

示例四:继承父接口的Object类的公共方法,自身声明了一个非Object类的公共方法,也属于函数接口

package org.springmorning.demo.javabase.annotation.pre;

/**
* @author 春晨
* @date 2019/1/20 20:22
* Copyright 2019 春晨 https://www.cnblogs.com/springmorning/p/10296022.html
*
* @Description 继承的父接口,虽然不是函数接口,但是此接口声明了抽象方法,此方法不属于Object类的public方法,因此属于函数接口
*/
public interface EquivalentInterface <T> extends NonFunctionInterface{
int compare(T o1, T o2);
}

示例五:包含覆写Object类公共方法的函数接口

/**
* @author 春晨
* @date 2019/1/20 20:24
* Copyright 2019 春晨 https://www.cnblogs.com/springmorning/p/10296022.html
*
* @Description 包含覆写Object中equals方法的函数接口
*/
public interface EquivalentInterface <T> {
int compare(T o1, T o2); boolean equals(Object obj);
}

示例六:既包含覆写Object中equals方法,又包含default方法的函数接口

/**
* @author 春晨
* @date 2019/1/20 20:26
* Copyright 2019 春晨 https://www.cnblogs.com/springmorning/p/10296022.html
*
* @Description 既包含覆写Object中equals方法,又包含default方法的函数接口
*/
public interface EquivalentInterface <T> {
int compare(T o1, T o2); boolean equals(Object obj); default String name(){
return "EquivalentInterface";
}
}

示例七:从父接口继承覆写等效方法的函数接口

package org.springmorning.demo.javabase.annotation.pre;

/**
* @author 春晨
* @date 2019/1/20 20:36
* Copyright 2019 春晨 https://www.cnblogs.com/springmorning/p/10296022.html
*
* @Description 函数接口的抽象方法可以是从X、Y两个父接口继承而来,但继承而来的valueOf方法是覆写等效,因此Z接口也属于函数接口
*/
interface X{
int valueOf(String x);
}
interface Y{
int valueOf(String y);
} public interface Z extends X, Y{
}

示例八:从父接口继承覆写等效方法的函数接口

 
package org.springmorning.demo.javabase.annotation.pre;

/**
* @author 春晨
* @date 2019/1/20 20:41
* Copyright 2019 春晨 https://www.cnblogs.com/springmorning/p/10296022.html
*
* @Description 函数接口的抽象方法可以是从A、B两个父接口继承而来,但继承而来的convert方法是覆写等效,因此C接口也属于函数接口
*/
interface A{
Iterable convert(Iterable<String> arg);
} interface B{
Iterable<String> convert(Iterable arg);
} public interface C extends A, B{
}

示例九:从父接口继承覆写等效方法的泛型函数接口

package org.springmorning.demo.javabase.annotation.pre;

/**
* @author 春晨
* @date 2019/1/20 20:53
* Copyright 2019 春晨 https://www.cnblogs.com/springmorning/p/10296022.html
*
* @Description 函数接口的抽象方法可以是从O、P两个父接口继承而来,但继承而来的classInfo方法是覆写等效,因此Q接口也属于函数接口
*/ interface O <T>{
T classInfo(Class<?> c);
} interface P <S>{
S classInfo(Class<?> c);
} public interface Q extends O, P{
}

函数接口(Functional Interfaces)的更多相关文章

  1. [二] java8 函数式接口详解 函数接口详解 lambda表达式 匿名函数 方法引用使用含义 函数式接口实例 如何定义函数式接口

    函数式接口详细定义 package java.lang; import java.lang.annotation.*; /** * An informative annotation type use ...

  2. Java8 函数式接口-Functional Interface

    目录 函数式接口: JDK 8之前已有的函数式接口: 新定义的函数式接口: 函数式接口中可以额外定义多个Object的public方法一样抽象方法: 声明异常: 静态方法: 默认方法 泛型及继承关系 ...

  3. Java 8函数式接口functional interface的秘密

    Java 8函数式接口functional interface的秘密 2014年10月29日 17:52:55 西瓜可乐520 阅读数:3729   目录 [−] JDK 8之前已有的函数式接口 新定 ...

  4. java8函数式接口(Functional Interface)

    介绍 函数式接口(Functional Interface)就是一个有且仅有一个抽象方法,但是可以有多个非抽象方法的接口. 函数式接口可以被隐式转换为 lambda 表达式(箭头函数). 函数式接口代 ...

  5. 【Java 8】函数式接口(二)—— 四大函数接口介绍

    前言 Java8中函数接口有很多,大概有几十个吧,具体究竟是多少我也数不清,所以一开始看的时候感觉一脸懵逼,不过其实根本没那么复杂,毕竟不应该也没必要把一个东西设计的很复杂. 几个单词 在学习了解之前 ...

  6. Spring AOP在函数接口调用性能分析及其日志处理方面的应用

    面向切面编程可以实现在不修改原来代码的情况下,增加我们所需的业务处理逻辑,比如:添加日志.本文AOP实例是基于Aspect Around注解实现的,我们需要在调用API函数的时候,统计函数调用的具体信 ...

  7. IO端口和IO内存的区别及分别使用的函数接口

    每个外设都是通过读写其寄存器来控制的.外设寄存器也称为I/O端口,通常包括:控制寄存器.状态寄存器和数据寄存器三大类.根据访问外设寄存器的不同方式,可以把CPU分成两大类.一类CPU(如M68K,Po ...

  8. Starter Set of Functional Interfaces

    Java Development Kit 8 has a number of functional interfaces. Here we review the starter set-the int ...

  9. C语言的本质(15)——C语言的函数接口入门

    C语言的本质(15)--C语言的函数接口 函数的调用者和其实现者之间存在一个协议,在调用函数之前,调用者要为实现者提供某些条件,在函数返回时,实现者完成调用者需要的功能. 函数接口通过函数名,参数和返 ...

  10. C语言的本质(16)——函数接口的传入参数与传出参数

    如果函数接口有指针参数,既可以把指针所指向的数据传给函数使用(称为传入参数),也可以由函数填充指针所指的内存空间,传回给调用者使用(称为传出参数),例如strcpy的函数原型为 char *strcp ...

随机推荐

  1. 1、kubernetes概念

    一.kubernetes简介 kubernetes的本质是一组服务器集群.它可以在每个节点上运行特定的程序,来对节点中的容器进行管理.目的是为了实现资源管理的自动化. 主要功能如下: 1.自我修复:一 ...

  2. Oracle安装及各种问题

    --hsql 1:jdk 本机位置:E:\Program Files\Java\jdk1.7.0_80\ 安装教程:复制然后配置环境变量 (1)新建->变量名"JAVA_HOME&qu ...

  3. 让代码变得优雅简洁的神器:Java8 Stream流式编程

    原创/朱季谦 本文主要基于实际项目常用的Stream Api流式处理总结. 因笔者主要从事风控反欺诈相关工作,故而此文使用比较熟悉的三要素之一的[手机号]黑名单作代码案例说明. 我在项目当中,很早就开 ...

  4. 深度剖析Redis九种数据结构实现原理,建议收藏

    1. Redis介绍 Redis 是一个高性能的键值存储系统,支持多种数据结构. 包含五种基本类型 String(字符串).Hash(哈希).List(列表).Set(集合).Zset(有序集合),和 ...

  5. Intellij_idea for循环 快捷键

    for循环四次.用 i 进行for循环 4.for fori 增强for循环 int [] arrays=new int[2]; arrays.for

  6. 通过 iframe 调用 天气预报&jsonp

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  7. linux网络开发者定位问题常用工具和命令总结

    本文章来自我的微信个人技术公众号---网络技术修炼,公众号中总结普及网络基础知识,包括基础原理.网络方案.开发经验和问题定位案例等,欢迎关注. Linux网络开发者面临的问题往往比较复杂,因此需要使用 ...

  8. GIL和池的概念

    1.GIL概念 1. 什么是GIL(为Cpython解释器) GIL本身就是一把互斥锁. 原理都一样. 都是让并发的线程同一时间只能执行一个 所以有了GIL的存在. 同一进程下的多个线程同一时刻只能有 ...

  9. 容器云平台监控告警体系(五)—— Prometheus发送告警机制

    1.概述 在Prometheus的架构中告警被划分为两个部分,在Prometheus Server中定义告警规则以及产生告警,Alertmanager组件则用于处理这些由Prometheus产生的告警 ...

  10. 笔记八:linux系统编程之IO

    笔记:linux系统编程之IO 应用层     内核层     硬件层 应用层:数据结构 .java.android.C.C++,C#: l inux高级编程:涉及内核为应用层提供接口函数: 内核五大 ...