java 7中java 8的功能接口

msu*_*ung 19 java compatibility java-7 java-8

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

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

ass*_*ias 18

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

例如,Runnable是一个功能接口,在Java 8中你可以写:Runnable 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); } });
Run Code Online (Sandbox Code Playgroud)

someMethod(t -> use(t));
Run Code Online (Sandbox Code Playgroud)

然后改变的签名someMethod(MyConsumer<T> mc)someMethod(Consumer<T> c),摆脱你的MyConsumer界面和你做.

  • 由于你自己的接口必须驻留在不同的`package`中(你不能添加到`java....`),你甚至可以将它命名为"Consumer"而不是"MyConsumer".如果签名完全匹配,那么在迁移到Java 8时,您可以将自己的`Consumer`转换为`java.util.function.Consumer`的子接口. (3认同)

mkd*_*dev 6

以下是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);
}
Run Code Online (Sandbox Code Playgroud)