Jdk1.6、1.7、1.8、1.9的新特性

七、访问对象字段与静态变量

和本地变量不同的是,lambda内部对于实例的字段以及静态变量是即可读又可写。该行为和匿名对象是一致的:


代码如下:

class Lambda4 {

    static int outerStaticNum;

    int outerNum;

    void testScopes() {


            outerNum = 23;

            return String.valueOf(from);

        };


            outerStaticNum = 72;

            return String.valueOf(from);

        };

    }

}

八、访问接口的默认方法

还记得第一节中的formula例子么,接口Formula定义了一个默认方法sqrt可以直接被formula的实例包括匿名对象访问到,但是在lambda表达式中这个是不行的。

Lambda表达式中是无法访问到默认方法的,以下代码将无法


代码如下:

Formula formula = (a) -> sqrt( a * 100);

Built-in Functional Interfaces

1.8 API包含了很多内建的函数式接口,在老中常用到的比如Comparator或者Runnable接口,这些接口都增加了@FunctionalInterface注解以便能用在lambda上。

8 API同样还提供了很多全新的函数式接口来让工作更加方便,有一些接口是来自Google Guava库里的,即便你对这些很熟悉了,还是有必要看看这些是如何扩展到lambda上使用的。

Predicate接口

Predicate 接口只有一个参数,返回boolean类型。该接口包含多种默认方法来将Predicate组合成其他复杂的逻辑(比如:与,或,非):


代码如下:


predicate.test(“foo”);              // true

predicate.negate().test(“foo”);     // false





Function 接口

Function 接口有一个参数并且返回一个结果,并附带了一些可以和其他函数组合的默认方法(compose, andThen):


代码如下:



backToString.apply(“123”);     // “123”

Supplier 接口

Supplier 接口返回一个任意范型的值,和Function接口不同的是该接口没有任何参数


代码如下:


personSupplier.get();   // new Person


声明: 除非转自他站(如有侵权,请联系处理)外,本文采用 BY-NC-SA 协议进行授权 | 智乐兔
转载请注明:转自《Jdk1.6、1.7、1.8、1.9的新特性
本文地址:https://www.zhiletu.com/archives-4702.html
关注公众号:智乐兔

赞赏

wechat pay微信赞赏alipay pay支付宝赞赏

Pages: 1 2 3 4 5 6 7 8 9
上一篇
下一篇

相关文章

在线留言

你必须 登录后 才能留言!