java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > jdk8 FunctionalInterface注解

jdk8 FunctionalInterface注解源码解读

作者:丰木

这篇文章主要介绍了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.

打捞要点之后有三点

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.

接口声明

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

/**
 * 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注解的资料请关注脚本之家其它相关文章!

您可能感兴趣的文章:
阅读全文