首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >java 7中java 8的功能接口

java 7中java 8的功能接口
EN

Stack Overflow用户
提问于 2014-04-07 07:01:07
回答 5查看 18.9K关注 0票数 22

java 8的功能接口是否在某个地方(即jar)可用,以便我可以在Java 7项目中使用它们?这样,以后我就可以更容易地将代码移植到惯用的java 8。如果没有,这在技术上是可行的还是使用了新特性,比如默认方法?

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

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 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从以下位置进行重构:

代码语言:javascript
复制
someMethod(new MyConsumer<T>() { public void accept(T t) { use(t); } });

转到

代码语言:javascript
复制
someMethod(t -> use(t));

然后将someMethod(MyConsumer<T> mc)的签名转换为someMethod(Consumer<T> c),去掉MyConsumer接口,您就完成了。

票数 19
EN

Stack Overflow用户

发布于 2014-07-30 16:22:48

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

代码语言:javascript
复制
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);
}
票数 10
EN

Stack Overflow用户

发布于 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/)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22905562

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档