jdk8 FunctionalInterface注解源码解读

 更新时间:2023年11月03日 10:11:36   作者:丰木  
这篇文章主要介绍了jdk8 FunctionalInterface注解源码解读,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

源码 

package java.lang;
import java.lang.annotation.*;
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface FunctionalInterface {}

Conceptually, a functional interface has exactly one abstract method.

Since default methods have an implementation, they are not abstract.

If an interface declares an abstract method overriding one of the public methods of java.lang.Object, that also does not count toward the interface's abstract method count since any implementation of the interface will have an implementation from java.lang.Object or elsewhere.

打捞要点之后有三点

  • 要声明FunctionalInterface的接口只能有1个抽象方法;

a functional interface has exactly one abstract method.

  • 因为default方法有实现,所以它也不是抽象方法, 所以不在列;
Since default methods have an implementation, they are not abstract.
  • 因为这里限定抽象方法只能有1个,那么如果我的接口里声明了一个 抽象方法"String toString();"或者"boolean equals(Object obj);"这样的,算不算呢? 答案是: 不算这个,因为任何实现接口的对象都会继承Object,所以这些public的Object的方法,不算在列的。

If an interface declares an abstract method overriding one of the public methods of java.lang.Object, that also does not count toward the interface's abstract method count since any implementation of the interface will have an implementation from java.lang.Object or elsewhere.

接口声明

也就是说,你的接口可以声名如下:

/**
 * Created by niewj on 2017/10/26.
 */
@FunctionalInterface
public interface FunctionalInterfaceSummary {
    int doSum(int x, int y); // 抽象方法
    String toString(); // 不占1的数额
    boolean equals(Object obj); // 不占1的数额
    // boolean equals(); // 占1的数额,这不是Object方法
    default void display() {
        System.out.println("show sth..");
    }
}

小结

1. 接口只限一个抽象方法,可注解@FunctionalInterface 限定;

2. 声明函数式接口之后,有以下特征:

a. 只有一个抽象方法;

b. Object类的public的方法也可以在接口里写出来,因为这不算;

c. default方法不算, 因为它们是implementation。不是abstract!

以上就是jdk8 FunctionalInterface注解源码解读的详细内容,更多关于jdk8 FunctionalInterface注解的资料请关注脚本之家其它相关文章!

相关文章

  • Spring Data JPA使用Sort进行排序(Using Sort)

    Spring Data JPA使用Sort进行排序(Using Sort)

    本篇文章主要介绍了Spring Data JPA使用Sort进行排序(Using Sort),具有一定的参考价值,有兴趣的可以了解一下
    2017-07-07
  • PowerJob的CleanService清理服务流程

    PowerJob的CleanService清理服务流程

    这篇文章主要为大家介绍了PowerJob的CleanService清理服务流程源码解读,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪<BR>
    2024-02-02
  • spring security的BCryptPasswordEncoder加密和对密码验证的原理分析

    spring security的BCryptPasswordEncoder加密和对密码验证的原理分析

    文章介绍了加密算法和hash算法的基本概念,以及BCryptPasswordEncoder加密和解密的原理,加密算法是可逆的,需要加盐以保证安全性,BCryptPasswordEncoder通过生成盐值并在加密和解密过程中使用,确保相同的明文每次加密结果不同,从而提高安全性
    2024-11-11
  • Java算法之计数排序、桶排序、基数排序实现代码

    Java算法之计数排序、桶排序、基数排序实现代码

    这篇文章主要介绍了Java算法之计数排序、桶排序、基数排序实现的相关资料,分别通过计数、分桶和位数处理实现高效稳定排序,文中通过代码及图文介绍的非常详细,需要的朋友可以参考下
    2025-05-05
  • Java字符串去除特殊字符内容的实例

    Java字符串去除特殊字符内容的实例

    下面小编就为大家分享一篇Java字符串去除特殊字符内容的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2017-12-12
  • mybatis实现查询操作及获得添加的ID

    mybatis实现查询操作及获得添加的ID

    这篇文章主要介绍了mybatis实现查询操作及获得添加的ID,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-11-11
  • 基于SpringBoot实现验证码功能(两种验证码方式)

    基于SpringBoot实现验证码功能(两种验证码方式)

    这篇文章主要介绍了基于SpringBoot实现验证码功能,今天我们介绍的是两种主流的验证码,一种就是进行计算的验证码,另外一种就是不需要计算,直接输入的验证码,需要的朋友可以参考下
    2024-08-08
  • java实现留言板功能实例

    java实现留言板功能实例

    这篇文章主要为大家详细介绍了JSP+JavaBean的留言板技术 ,JavaWeb登陆功能实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-04-04
  • Java方法的参数传递机制实例详解

    Java方法的参数传递机制实例详解

    这篇文章主要介绍了Java方法的参数传递机制,结合实例形式详细分析了java方法参数传递机制原理、实现方法及操作注意事项,需要的朋友可以参考下
    2019-09-09
  • IDEA中新建/切换Git分支的实现步骤

    IDEA中新建/切换Git分支的实现步骤

    本文主要介绍了IDEA中新建/切换Git分支的实现步骤,通过菜单创建新分支并选择是否切换,创建后在Git详情或右键Checkout中切换分支,感兴趣的可以了解一下
    2025-07-07

最新评论