Java 8 学习笔记

整理 Java 8 的新特性。

👉 所有文章
lambda 匿名函数
函数式接口 Java 8 : 函数式接口注解 FunctionalInterface Java 8 : 函数式接口 Runnable : 无参数, 无返回值 Java 8 : 函数式接口 Callable : 无参数, 有返回值 Java 8 : 函数式接口 Supplier : 无参数, 有返回值 Java 8 : 函数式接口 Consumer : 1个参数, 无返回值 Java 8 : 函数式接口 Function : 1个参数, 有返回值 Java 8 : 函数式接口 BiFunction : 2个参数, 有返回值
函数引用 Java 8 : 函数引用

Java 8 : 函数式接口注解 FunctionalInterface


本文关键词: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);
    }

}

( 本文完 )

文章目录