函数接口(Functional Interfaces)
定义
首先,我们先看看函数接口在《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)的更多相关文章
- [二] java8 函数式接口详解 函数接口详解 lambda表达式 匿名函数 方法引用使用含义 函数式接口实例 如何定义函数式接口
函数式接口详细定义 package java.lang; import java.lang.annotation.*; /** * An informative annotation type use ...
- Java8 函数式接口-Functional Interface
目录 函数式接口: JDK 8之前已有的函数式接口: 新定义的函数式接口: 函数式接口中可以额外定义多个Object的public方法一样抽象方法: 声明异常: 静态方法: 默认方法 泛型及继承关系 ...
- Java 8函数式接口functional interface的秘密
Java 8函数式接口functional interface的秘密 2014年10月29日 17:52:55 西瓜可乐520 阅读数:3729 目录 [−] JDK 8之前已有的函数式接口 新定 ...
- java8函数式接口(Functional Interface)
介绍 函数式接口(Functional Interface)就是一个有且仅有一个抽象方法,但是可以有多个非抽象方法的接口. 函数式接口可以被隐式转换为 lambda 表达式(箭头函数). 函数式接口代 ...
- 【Java 8】函数式接口(二)—— 四大函数接口介绍
前言 Java8中函数接口有很多,大概有几十个吧,具体究竟是多少我也数不清,所以一开始看的时候感觉一脸懵逼,不过其实根本没那么复杂,毕竟不应该也没必要把一个东西设计的很复杂. 几个单词 在学习了解之前 ...
- Spring AOP在函数接口调用性能分析及其日志处理方面的应用
面向切面编程可以实现在不修改原来代码的情况下,增加我们所需的业务处理逻辑,比如:添加日志.本文AOP实例是基于Aspect Around注解实现的,我们需要在调用API函数的时候,统计函数调用的具体信 ...
- IO端口和IO内存的区别及分别使用的函数接口
每个外设都是通过读写其寄存器来控制的.外设寄存器也称为I/O端口,通常包括:控制寄存器.状态寄存器和数据寄存器三大类.根据访问外设寄存器的不同方式,可以把CPU分成两大类.一类CPU(如M68K,Po ...
- Starter Set of Functional Interfaces
Java Development Kit 8 has a number of functional interfaces. Here we review the starter set-the int ...
- C语言的本质(15)——C语言的函数接口入门
C语言的本质(15)--C语言的函数接口 函数的调用者和其实现者之间存在一个协议,在调用函数之前,调用者要为实现者提供某些条件,在函数返回时,实现者完成调用者需要的功能. 函数接口通过函数名,参数和返 ...
- C语言的本质(16)——函数接口的传入参数与传出参数
如果函数接口有指针参数,既可以把指针所指向的数据传给函数使用(称为传入参数),也可以由函数填充指针所指的内存空间,传回给调用者使用(称为传出参数),例如strcpy的函数原型为 char *strcp ...
随机推荐
- 一文带你弄懂 Maven 拉包原理
业务需求开发的时候,我们总是会遇到拉不到依赖包的情况.此时如果不清楚 Maven 拉取依赖包的原理,那么很可能找不到问题所在.今天树哥就带大家了解下 Maven 拉包的原理,让你在遇到问题的时候能快速 ...
- 细节拉满,80 张图带你一步一步推演 slab 内存池的设计与实现
1. 前文回顾 在之前的几篇内存管理系列文章中,笔者带大家从宏观角度完整地梳理了一遍 Linux 内存分配的整个链路,本文的主题依然是内存分配,这一次我们会从微观的角度来探秘一下 Linux 内核中用 ...
- 如何将 CentOS 8 转换为 CentOS Stream
CentOS 未来是不会更新数字版本了.CentOS 项目组,未来会变更为Stream版本,也就是俗称的滚动版本,那么如何将数字版本升级为滚动版本呢? 若需要将其转换为滚动版本,那么即可参考本文进行升 ...
- 1 Android开发书籍
不管你是Android菜鸟还是Android高手,一定能够找到一本适合自己阅读的书籍.下面为大家推荐8本书. <Android进阶之光> <Android进阶之光>详细并深入讲 ...
- 回顾.NET系列:Framework、Net Core、Net 过往
目录 一.个人最近工作变化 二.Framework.Net Core..NET 时过境迁 Framework:爱你定格在4.8 .Net Foundation:.Net变革大脑 重新统一的 .NET ...
- React课堂笔记2
一.JSX 1.1.什么是JSX JSX = JavaScript XML,这是React官方发明的一种JS语法(糖) 概念:JSX是 JavaScript XML(HTML)的缩写,表示在 JS 代 ...
- 以SQLserver为例的Dapper详细讲解
Dapper是一种轻量级的ORM(对象关系映射)工具,它提供了高效且易于使用的方式来执行数据库操作.Dapper是由Stack Overflow团队开发并维护的,它的主要目标是提供比EF更快.更直接的 ...
- 一文掌握ArrayList和LinkedList源码解读
大家好,我是Leo! 今天来看一下ArrayList和LinkedList的源码,主要是看一下常用的方法,包括像add.get.remove方法,大部分都是从源码直接解读的,相信大家读完都会有一定收获 ...
- Java代码读取properties配置文件
读取properties配置文件 package com.easycrud.utils; import java.io.IOException; import java.io.InputStream; ...
- office办公套件基础教程
正文 1.网页端的应用-office全家桶 这里我选择先聊web端的应用,首先,我们来想象一下,只要你有网络,有浏览器,就能打开一个网页,在网页上进行编辑.处理一些word.报表.ppt等,你不需要复 ...