java 8的功能接口是否在某个地方(即jar)可用,以便我可以在Java 7项目中使用它们?这样,以后我就可以更容易地将代码移植到惯用的java 8。如果没有,这在技术上是可行的还是使用了新特性,比如默认方法?
是的,我指的是java.util.function中的接口。因为添加带有java前缀的包似乎是不允许的,所以从其他地方导入它们并不是一种选择。
发布于 2014-04-07 07:58:58
函数接口只是一个只有一个非默认、非静态方法的接口.所有满足该定义的接口都可以通过Java 8中的lambda实现。
例如,Runnable是一个函数接口,在Java8中您可以编写:Runnable r = () -> doSomething();。
Java8带来的许多功能接口都是在 package中实现的。最常见的是:
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接口,您就完成了。
发布于 2014-07-30 16:22:48
以下是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);
}发布于 2014-08-28 03:42:18
Java 8功能接口是有限的。现在使用FunctionalJava类型P1、F、F2、F3、.、F8、TryCatch0、TryCatch1、.、TryCatch8来做同样的事情。
https://functionaljava.ci.cloudbees.com/job/master/javadoc/
您可以使用Retro项目使用Java 8和Lambda进行编译,但目标是Java 7 VM。这就避免了所有匿名内部类的胡说八道。参见FunctionalJava项目中的一个示例(http://www.functionaljava.org/)。
https://stackoverflow.com/questions/22905562
复制相似问题