详解@FunctionalInterface注解使用

看源码的时候经常会看到@FunctionalInterface注解,之前看到没明白该注解的用法,特意查询了一些资料。

1、先看一下该注解的定义:

@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface FunctionalInterface {}

通过该定义可知道该注解只能用于类。其实,它的应用范围更小,只能应用于接口类型上

2、注解使用事项

  • 该注解只能标记在只有一个抽象方法的接口上。
  • 接口中的静态方法或者默认方法,都不算抽象方式。
  • 接口默认继承java.lang.Object, 如果接口覆盖了Object中的方法,那么也不算抽象方法。
  • 该注解不是必须的,如果一个接口符合"函数式接口"定义,那么加不加该注解都没有影响。加上该注解能够更好地让编译器进行检查。如果编写的不是函数式接口,但是加上了@FunctionInterface,那么编译器会报错。

示例:

@FunctionalInterface
public interface UserService {

    void getUser(Long userId);

    // 默认方法,可以用多个默认方法
    public default void setUser() {
    }

    // 静态方法
    public static void saveUser() {
    }
    
    // 覆盖Object中的equals方法
    public boolean equals(Object obj);
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容