java 7 中 java 8 的功能接口

2022-09-02 01:24:41

java 8的功能接口是否在某个地方可用(即jar),所以我可以在Java 7项目中使用它们?这样,我以后可以更轻松地将代码移植到惯用的java 8。如果不是,这在技术上是否可行,或者他们是否利用了默认方法等新功能?

是的,我指的是java.util.function中的接口。因为添加带有java前缀的包似乎是不允许的,从其他地方导入它们不是一个选项。


答案 1

功能接口只是一个只有一个非默认、非静态方法的接口。所有满足该定义的接口都可以通过 Java 8 中的 lambda 实现。

例如,是一个功能接口,在Java 8中你可以写:。RunnableRunnable r = () -> doSomething();

Java 8带来的许多功能接口都在java.util.function中。最常见的是:

  • Consumer<T>它有一个void accept(T t)
  • Supplier<T>它有一个T get()
  • Function<T, R>它有一个R apply(T t)
  • Predicate<T>作为boolean test(T t)

在此阶段,您可以做的是在有意义的地方使用单方法接口,如果可能的话,使用类似的签名。迁移到 Java 8 后,您将能够通过以下方式通过 IDE 轻松重构:

someMethod(new MyConsumer<T>() { public void accept(T t) { use(t); } });

someMethod(t -> use(t));

然后将 的签名更改为 ,摆脱您的界面,您就完成了。someMethod(MyConsumer<T> mc)someMethod(Consumer<T> c)MyConsumer


答案 2

以下是java 8个主要功能接口的签名,作为assylias答案的补充

public interface Consumer<T> {
    void accept(T t);
}

public interface Supplier<T> {
    T get();
}

public interface Function<T, R> {
    R apply(T t);
}

public interface Predicate<T> {
    boolean test(T t);
}

推荐