详细分析@FunctionalInterface的基本知识(附Demo)

news2024/10/1 1:22:28

目录

  • 前言
  • 1. 基本知识
  • 2. Demo

前言

Java的基本知识推荐阅读:

  1. java框架 零基础从入门到精通的学习路线 附开源项目面经等(超全)
  2. Spring框架从入门到学精(全)

1. 基本知识

@FunctionalInterface 是 Java 8 引入的一个注解,用于标记一个接口为函数式接口

函数式接口是只包含一个抽象方法的接口,可以有多个默认方法或静态方法,通常用于 lambda 表达式和方法引用

  • 标记接口为函数式接口,明确接口的设计意图,使代码更易读,便于他人理解接口的用途
  • 编译器会确保被标记的接口只有一个抽象方法。如果接口有多于一个抽象方法,编译器会报错,从而避免接口被错误地使用

2. Demo

基本的使用法则如下:

定义函数式接口以及使用lambda

@FunctionalInterface
interface MyFunctionalInterface {
    void myMethod();
}


public class FunctionalInterfaceDemo {
    public static void main(String[] args) {
        MyFunctionalInterface func = () -> System.out.println("Hello, Functional Interface!");
        func.myMethod();
    }
}

多个默认方法和静态方法

@FunctionalInterface
interface MyFunctionalInterface {
    void myMethod();
    
    // 默认方法
    default void defaultMethod() {
        System.out.println("This is a default method.");
    }
    
    // 静态方法
    static void staticMethod() {
        System.out.println("This is a static method.");
    }
}


public class FunctionalInterfaceDemo {
    public static void main(String[] args) {
        MyFunctionalInterface func = () -> System.out.println("Hello, Functional Interface!");
        func.myMethod();
        func.defaultMethod();
        MyFunctionalInterface.staticMethod();
    }
}

为了进一步说明此注解的主要性:(编译检查)

加上注解:

在这里插入图片描述

给一个实际的Demo例子如下:

// 定义函数式接口
@FunctionalInterface
interface CorrectFunctionalInterface {
    void singleMethod();
    
    // 可以有默认方法
    default void defaultMethod() {
        System.out.println("This is a default method.");
    }
    
    // 可以有静态方法
    static void staticMethod() {
        System.out.println("This is a static method.");
    }
}


// 具体使用
public class FunctionalInterfaceDemo {
    public static void main(String[] args) {
        // 使用 lambda 表达式实现 singleMethod
        CorrectFunctionalInterface func = () -> System.out.println("Hello from singleMethod!");
        
        // 调用 singleMethod
        func.singleMethod();
        
        // 调用默认方法
        func.defaultMethod();
        
        // 调用静态方法
        CorrectFunctionalInterface.staticMethod();
    }
}

截图如下:

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1913155.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

理解负载组电路-EAK负载电路解释

负载组具有安全、可靠、操作方便、使用寿命长等特点。了解控制、冷却和负载元件电路的布局和功能对于理解负载组的运行、为应用选择负载组和维护负载组非常重要。以下各节将描述这些电路。 EAK负荷组运行概述 负载组接收来自电源的电力,将其转换为热量,…

【漏洞复现】通达OA v2017 video_file.php 任意文件下载漏洞

免责声明: 本文内容旨在提供有关特定漏洞或安全漏洞的信息,以帮助用户更好地了解可能存在的风险。公布此类信息的目的在于促进网络安全意识和技术进步,并非出于任何恶意目的。阅读者应该明白,在利用本文提到的漏洞信息或进行相关测…

数据结构之折半查找

折半查找的算法思想: 折半查找又称二分查找,它仅仅适用于有序的顺表。 折半查找的基本思想:首先将给定值key与表中中间位置的元素(mid的指向元素)比较。midlowhigh/2(向下取整) 若key与中间元…

字典树(Tire树)

字典树(Tire树) 字典树是一种多叉树,又称为前缀树。核心思想是利用字符串的公共前缀。 字典树的根节点为空,从根节点到某一节点路径上的字符连接起来构成字符串,完整的字符串在链上而非结点上,一个节点的所有子节点都具有相同公…

AMSR-E L2 降雨子集:GES DISC 的 CloudSat 轨道 V002 (AMSERR_CPR) 位于同一地点

AMSR-E L2 Rainfall Subset, collocated with CloudSat track V002 (AMSERR_CPR) at GES DISC AMSR-E L2 降雨子集,与位于 GES DISC 的 CloudSat 轨道 V002 (AMSERR_CPR) 位于同一地点 简介 这是沿云卫星视场轨迹的 AMSR-E 雨率产品子集。子集的目标是选择并返回…

英福康INFICON FabGuard传感器集成与分析系统PPT

英福康INFICON FabGuard传感器集成与分析系统PPT

14-65 剑和诗人39 - 打造你自己的 Devin

​​​​​ 绝密 Devin 架构 更具体地说,构建您自己的 AI 代理。 Devin 使用 GPT-4 ,而人们已经开始用 Claude-3-Opus 构建替代方案 Devin 的 UI 体验更好。 例如,它甚至看不到浏览器,但它确实存在于用户面前 此外,你可以随时与它“交谈”,就像与人交谈一样,它会在后…

使用linux的mail命令发送html格式的邮件

1、关闭本机的sendmail服务或者postfix服务 #执行下面的命令,各位大侠都对号入座吧 #sendmial service sendmail stop chkconfig sendmail off #postfix service postfix stop chkconfig postfix off#再狠一点就直接卸载吧.. yum remove sendmail yum remove postf…

操作系统:信号究竟是什么?如何产生?

OS信号 一、信号的概念二、信号的产生1)终端按键产生信号1、 前台进程、后台进程2、验证终端按键是否产生信号 2)调用系统函数向进程发信号3)硬件异常产生信号1、浮点数溢出,CPU产生信号2 浮点数溢出,产生信号原理3. 空…

【深度学习基础】MAC pycharm 专业版安装与激活

文章目录 一、pycharm专业版安装二、激活 一、pycharm专业版安装 PyCharm是一款专为Python开发者设计的集成开发环境(IDE),旨在帮助用户在使用Python语言开发时提高效率。以下是对PyCharm软件的详细介绍,包括其作用和主要功能&…

11、Python之变量:看得见还是看不见

引言 在前面一篇关于Python变量的文章中,更多地结合对象的内存结构及字节码指令,来看不同代码针对不同的类型的对象的不同效果。 今天这篇文章中,想对新手在使用Python变量中,可能遇到的其他困惑,再展开来说一下。 大…

Windows近源攻击应急响应

一、靶机介绍 Windows近源攻击 前景需要:小王从某安全大厂被优化掉后,来到了某私立小学当起了计算机老师。某一天上课的时候,发现鼠标在自己动弹,又发现除了某台电脑,其他电脑连不上网络。感觉肯定有学生捣乱&#x…

量子保密通信协议原理:量子保密通信实验

纸上得来终觉浅,绝知此事要躬行。 在之前的文章中,我们对量子密钥分发协议原理、分发过程进行了详细的描述,今天我们实操一波。博主向大家隆重介绍一下华中师范大学量子保密通信虚拟仿真试验平台:量子保密通信是将量子密钥分发和一…

旷野之间2 - 如何训练医疗保健小型语言模型(AI-SLM)

​​​​ 在本文中,我们将研究如何针对疾病症状训练一个小型医疗保健语言模型。为此,我们将从HuggingFace获取数据集(用于训练我们的模型):https://huggingface.co/datasets/QuyenAnhDE/Diseases_Symptoms QuyenAnhDE/Diseases_Symptoms 数据集来自 Hugging Face。图片来源…

SAP 报工BAPI中的 UPDATA TASK 和 BACKGROUND TASK

前言: 记录这篇文章起因是调查生产订单报工问题引申出来的一个问题,后来再次调查后了解了其中缘由,大概记录以下,如有不对,欢迎指正。问题原贴如下: SAP CO11N BAPI_PRODORDCONF_CREATE_TT连续报工异步更…

记一次java进程异常退出原因排查

最近在对一个Java服务进行压测,但是压测一段时间后,java进程就会自动停止,虽然怀疑可能是内存不足原因导致的,但是从服务日志中去看,并没有OOM的相关报错日志。这就很奇怪了!然后就从Java启动参数入手&…

MQTT教程--服务器使用EMQX和客户端使用MQTTX

什么是MQTT MQTT(Message Queuing Telemetry Transport)是一种轻量级、基于发布-订阅模式的消息传输协议,适用于资源受限的设备和低带宽、高延迟或不稳定的网络环境。它在物联网应用中广受欢迎,能够实现传感器、执行器和其它设备…

WPF依赖附加属性

依赖附加属性的定义 基本过程:声明、注册、包装 依赖附加属性必须在依赖对象,附加属性不一定,关注的是被附加的对象是否是依赖对象 快捷方式:propa tab 关键字:RegisterAttached // 方法封装 public static int …

【系统架构设计师】九、软件工程(需求工程|系统分析与设计|DFD|DD|高内聚低耦合)

目录 四、需求工程 4.1 软件需求层次 4.2 软件需求 4.3 需求获取 4.4 需求分析 4.5 需求定义 4.6 需求确认与验证 4.7 需求管理 4.7.1 变跟控制 4.7.2 需求追踪 五、系统分析与设计 5.1 结构化方法 5.1.1 结构化需求分析 5.1.2 数据流图DFD 5.1.3 数据字典DD …

外卖商城平台小程序的设计

管理员账户功能包括:系统首页,个人中心,用户管理,商家管理,骑手管理,商品类型管理,商品信息管理,订单信息管理 微信端账号功能包括:系统首页,商品信息&#…