设为首页收藏本站

LUPA开源社区

 找回密码
 注册
文章 帖子 博客

Java 8全面解析

2013-9-1 14:30| 发布者: joejoe0332| 查看: 7330| 评论: 1|原作者: infoq|来自: infoq

摘要:     TechEmpower是位于加利福尼亚州埃尔塞贡多的一家定制应用开发公司,该公司发表了一篇题为“Java 8全面解析”的博客文章。该博客文章全面概括了开发者在即将到来的Java 8中所要面对的变化。下面的内容快速概括 ...

    TechEmpower是位于加利福尼亚州埃尔塞贡多的一家定制应用开发公司,该公司发表了一篇题为“Java 8全面解析”的博客文章。该博客文章全面概括了开发者在即将到来的Java 8中所要面对的变化。下面的内容快速概括了该博客文章中的信息。如果想查看所有的细节请访问TechEmpower的博客文章。


改进接口

现在可以在接口中定义静态方法了。例如,java.util.Comparator接口中现在拥有一个静态的naturalOrder方法。

public static <T extends Comparable<? super T>> Comparator <T>naturalOrder() {
return (Comparator<T>) Cmparators.NaturalOrderComparator.INSTANCE;
}

还能够在接口中提供默认方法。通过该功能,程序员能够在不破坏已有的接口实现代码的前提下添加新方法。例如,java.lang.Iterable接口现在拥有一个默认的forEach方法。

public default void forEach(Consumer<? super T> action) {
Objects.requireNonNull(action);
for (T t : this) {
action.accept(t);
   }
  }

注意,接口不能为Object类中的任何方法提供默认的实现。


函数式接口

函数式接口是只定义了一个抽象方法的接口。Java 8引入了FunctionalInterface注解来表明一个接口打算成为一个函数式接口。例如,java.lang.Runnable就是一个函数式接口。

@FunctionalInterface
public interface Runnable {
public abstract void run();
}

注意,不管FunctionalInterface注解是否存在,Java编译器都会将所有满足该定义的接口看作是函数式接口。


Lambda

函数式接口的重要属性是:我们能够使用lambda实例化它们,Lambda表达式让你能够将函数作为方法参数,或者将代码作为数据对待。下面是Lambda的一些例子。输入在左边,代码在右边。输入类型能够被推断出来,同时是可选的。

(int x, int y) ->{ return x + y; }
(x, y) -> x + y
x -> x * x
() -> x
x -> { System.out.println(x); }

下面是实例化Runnable函数式接口的一个例子。

Runnable r = () ->{ System.out.println("Running!"); }

方法引用

方法引用是简洁的Lambda表达式,能够用于已经拥有名称的方法。下面是一些方法引用的例子,右边是同样效果的Lambda表达式。

String::valueOf x ->String.valueOf(x)
Object::toString x ->x.toString()
x::toString () ->x.toString()
ArrayList::new () -> new ArrayList<>()
 

与捕获相对的非捕获Lambda

如果使用Lambda表达式访问一个在Lambda语句体外定义的非静态变量或者对象,那么它会被说成是“捕获”。例如,下面的Lambda会访问变量x:

int x = 5;
return y -> x + y;

一个Lambda表达式仅能够访问final或者有效final封闭块中的局部变量和参数。

java.util.function

新版本向 java.util.function包中添加了很多新的函数式接口。下面是一些例子:

  • Function<T, R>——将T作为输入,返回R作为输出
  • Predicate<T>——将T作为输入,返回一个布尔值作为输出
  • Consumer<T>——将T作为输入,不返回任何内容
  • Supplier<T>——没有输入,返回T
  • BinaryOperator<T>——将两个T作为输入,返回一个T作为输出


酷毙

雷人

鲜花

鸡蛋
1

漂亮

刚表态过的朋友 (1 人)

  • 快毕业了,没工作经验,
    找份工作好难啊?
    赶紧去人才芯片公司磨练吧!!

最新评论

关于LUPA|人才芯片工程|人才招聘|LUPA认证|LUPA教育|LUPA开源社区 ( 浙B2-20090187 浙公网安备 33010602006705号   

返回顶部