Java 8:函数式接口注解 FunctionalInterface


#Java 8#


本文关键词:Java 8, 函数式接口,lambda 。

介绍

源码:

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

说明:

根据源码注释,

  • 该注解只能用于接口,不能用于注解、枚举、类。
  • 被注解的类型,必须满足函数式接口的条件。

函数式接口条件:

  • 只能有一个抽象方法(abstract method)。
  • default 方法因为是有具体实现的,所以不算抽象方法。
  • 抽象方法不能和 java.lang.Object 的方法相同。

函数式接口的实例,可以用于 lambda 表达式、函数引用、构造器引用。

示例

定义函数式接口如下:

@FunctionalInterface
public interface IProcessor<T> {

    void process(T t);

}

Java 8 之前的写法:

public class Main {

    public static void main(String[] args) {
        IProcessor<Long> processor = new IProcessor<Long>() {
            @Override
            public void process(Long aLong) {
                System.out.println(aLong);
            }
        };

        processor.process(123L);
    }

}

使用 Java 8 的 lambda 写法:

public class Main {

    public static void main(String[] args) {
        IProcessor<Long> processor = aLong -> {
            System.out.println(aLong);
        };
        processor.process(123L);
    }

}

使用 lambda + 函数引用:

public class Main {

    public static void main(String[] args) {
        IProcessor<Long> processor = System.out::println;
        processor.process(123L);
    }

}

( 本文完 )