对于一个现有构造函数,你可以利用它的名称和关键字 new 来创建它的一个引用:ClassNmae::new。它的功能与指向静态方法的引用类似。

零个参数

例如,假设有一个构造函数没有参数。它适合Supplier的签名() -> Apple。(见文章《Java8 常用的函数式接口》)你可以这样做:

这等价于:




一个参数

如果你的构造函数的签名是 Apple(Integer weight), 那么它就适合 Function 接口的签名,于是可以这样写:

这等价于:



在下面的代码中,一个由 Integer 构成的 List 中的每个元素都通过我们前面定义的类似的 map 方法传递给了 Apple 的构造函数,得到了一个具有不同重量苹果的 List:




两个参数

如果你有一个具有两个参数的构造函数 Apple(String color, Integer weight), 那么它就适合 BiFunction 接口的签名,于是你可以这样写:

这等价于:



不将构造函数实例化却能引用它。例如:
你可以使用 Map 来将构造函数映射到字符串值。你可以创建一个 giveMeFruit 方法,给它一个 String 和一个 Integer,它就可以创建出不同重量的各种水果:




三个参数

前面已经讲了如何将有零个、一个、两个参数的构造函数转变为构造函数引用了,但是具有三个参数的构造函数要转变为构造函数引用呢?比如 Color(int, int, int),语言本身并没有提供与其(构造函数)签名匹配的函数式接口。但是,你可以自己创建一个:

然后你就可以像下面这样使用构造函数引用了:

构造函数引用的语法 ClassName::new

所有内容来自于《Java8 实战》

发表评论

电子邮件地址不会被公开。 必填项已用*标注