java 7 中 java 8 的功能接口
2022-09-02 01:24:41
java 8的功能接口是否在某个地方可用(即jar),所以我可以在Java 7项目中使用它们?这样,我以后可以更轻松地将代码移植到惯用的java 8。如果不是,这在技术上是否可行,或者他们是否利用了默认方法等新功能?
是的,我指的是java.util.function中的接口。因为添加带有java前缀的包似乎是不允许的,从其他地方导入它们不是一个选项。
java 8的功能接口是否在某个地方可用(即jar),所以我可以在Java 7项目中使用它们?这样,我以后可以更轻松地将代码移植到惯用的java 8。如果不是,这在技术上是否可行,或者他们是否利用了默认方法等新功能?
是的,我指的是java.util.function中的接口。因为添加带有java前缀的包似乎是不允许的,从其他地方导入它们不是一个选项。
功能接口只是一个只有一个非默认、非静态方法的接口。所有满足该定义的接口都可以通过 Java 8 中的 lambda 实现。
例如,是一个功能接口,在Java 8中你可以写:。Runnable
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); } });
到
someMethod(t -> use(t));
然后将 的签名更改为 ,摆脱您的界面,您就完成了。someMethod(MyConsumer<T> mc)
someMethod(Consumer<T> c)
MyConsumer
以下是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);
}