上篇文章简单学习了java8内置得4大核心函数式接口,这类接口可以解决我们遇到得大多数得业务场景得问题。今天来简单学习一下方法引用与构造器引用。

一、方法引用
 
 方法引用:若lambda 体中得内容已经有方法实现了,我们可以使用方法引用(可以理解为方法引用为lambda表达式得另一种表现形式)

  

    @Test
public void test1() {
Consumer<String> con = (x) -> System.out.println(x); //下面这种写法与上面写法效果一致
PrintStream pr = System.out;
Consumer<String> con1 = pr :: println;
}

    要想使用方法引用,就必须实现得方法得返回值和参数与函数式接口中得返回值和参数所一致。

    我们来看下java8中内置得Consumer接口中得accept方法。

 /**
* Performs this operation on the given argument.
*
* @param t the input argument
*/
void accept(T t);

    我们再看下println方法。

   /**
* Prints a String and then terminate the line. This method behaves as
* though it invokes <code>{@link #print(String)}</code> and then
* <code>{@link #println()}</code>.
*
* @param x The <code>String</code> to be printed.
*/
public void println(String x) {
synchronized (this) {
print(x);
newLine();
}
}

    因为他们得返回值一致,参数也一致,所以可以这样使用方法引用。

    @Test
public void test2() {
Comparator<Integer> com = (x, y) -> Integer.compare(x, y);
int b = com.compare(5, 6); Comparator<Integer> com1 = Integer :: compare;
int c = com1.compare(7, 8);
}

    如果是静态方法的话,首先也是要返回值和参数与Comparator中的compare方法得一致,然后可以直接使用类名 :: 方法名去引用这个方法。上面得接口中得实现已经由Integer中得compare方法实现了,而且两个方法得返回值与参数都一致,所以,可以这样 使用。

     @Test
public void test3() {
BiPredicate<String, String> bi = (x, y) -> x.equals(y); BiPredicate<String, String> bi1 = String :: equals;
}

    这类引用就比较特殊了,这类引用要求第一个入参的类型必须时调用方法的实例,第二二个参数必须时方法得参数才可以使用这种类型得引用。

二、构造器引用

  格式: ClassName :: new

     @Test
public void test4() {
Supplier<Encoder> su = () -> new Encoder(); Supplier<Encoder> su1 = Encoder :: new;
}

    上面时调用无参构造器

     @Test
public void test5() {
Function<Integer, Integer> fun = (x) -> new Integer(x); Function<Integer, Integer> fun1 = Integer :: new;
}

    上面是调用有参构造器。

    上面得2个方法调用什么构造器,主要取决于函数式接口中参数得个数和类型。

三、数组引用

  格式 :Type :: new

     @Test
public void test6() {
Function<Integer, String[]> fun = (x) -> new String[x]; Function<Integer, String[]> fun1 = String[] :: new;
}

    上面得方式,我们可以快速得创建数组。

java8新特性——方法引用与构造器引用的更多相关文章

  1. JAVA8新特性——方法引用

    JAVA9都要出来了,JAVA8新特性都没搞清楚,是不是有点掉队哦~ 在Lamda新特性的支持下,JAVA8中可以使用lamda表达式来创建匿名方法.然而,有时候我们仅仅是需要调用一个已存在的方法(如 ...

  2. Java8新特性 - 方法引用与构造器引用

    方法引用 若Lambda体中的内容有方法已经实现了,我们可以使用"方法应用",可以理解为方法引用是Lambda表达式的另外一种表现形式. 使用操作符"::"将方 ...

  3. java8新特性-方法引用

    方法引用:若 Lambda 体中的功能,已经有方法提供了实现,可以使用方法引用 (可以将方法引用理解为 Lambda 表达式的另外一种表现形式) 1. 对象的引用 :: 实例方法名2. 类名 :: 静 ...

  4. Java8 新特性 方法引用

    什么是方法引用   方法引用可以被看作仅仅调用特定方法的Lamdba表达式的一种快捷方式.比如说Lamdba代表的只是直接调用这个方法,最好还是用名称来调用它,可不用用对象.方法名(),方法引用,引用 ...

  5. Java8新特性之方法引用&Stream流

    Java8新特性 方法引用 前言 什么是函数式接口 只包含一个抽象方法的接口,称为函数式接口. 可以通过 Lambda 表达式来创建该接口的对象.(若 Lambda 表达式抛出一个受检异常(即:非运行 ...

  6. Java8新特性—四大内置函数式接口

    Java8新特性--四大内置函数式接口 预备知识 背景 Lambda 的设计者们为了让现有的功能与 Lambda 表达式良好兼容,考虑了很多方法,于是产生了函数接口这个概念. 什么是函数式接口? 函数 ...

  7. Java8新特性之二:方法引用

    上一节介绍了Java8新特性中的Lambda表达式,本小节继续讲解Java8的新特性之二:方法引用.方法引用其实也离不开Lambda表达式. 1.方法引用的使用场景 我们用Lambda表达式来实现匿名 ...

  8. 乐字节-Java8新特性之方法引用

    上一篇小乐介绍了<Java8新特性-函数式接口>,大家可以点击回顾.这篇文章将接着介绍Java8新特性之方法引用. Java8 中引入方法引用新特性,用于简化应用对象方法的调用, 方法引用 ...

  9. 乐字节-Java8新特性-接口默认方法

    总概 JAVA8 已经发布很久,而且毫无疑问,java8是自java5(2004年发布)之后的最重要的版本.其中包括语言.编译器.库.工具和JVM等诸多方面的新特性. Java8 新特性列表如下: 接 ...

随机推荐

  1. .net中的lock

     lock锁 //定义一个私有成员变量,用于Lock的锁定标志 private static object lockobj = new object(); void DoSomething() { l ...

  2. 【洛谷 P3965】 [TJOI2013]循环格(费用流)

    题目链接 回路限制经典题. 每个点拆成入点和出点,源点连每个点的出点,流量1,费用0,每个点出点连汇点,流量1,费用0,入点和出点之间没有边. 也就是说每个点必须靠其他点流来的流量来流入汇点,同时自己 ...

  3. 【leetcode 简单】第十二题 报数

    报数序列是指一个整数序列,按照其中的整数的顺序进行报数,得到下一个数.其前五项如下: 1. 1 2. 11 3. 21 4. 1211 5. 111221 1 被读作  "one 1&quo ...

  4. HDU 1394 Minimum Inversion Number (树状数组)

    题目链接 Problem Description The inversion number of a given number sequence a1, a2, ..., an is the numb ...

  5. 固定bottom,页面其它可滑动实现方案

    利用flex布局, <html> <body> <div class='container'> <div class='content'></di ...

  6. stegsolve使用探究

    应该也不是工具的问题吧,更多的是图片.但是不知道咋取就写工具了. 比如:http://ctf5.shiyanbar.com/stega/chromatophoria/steg.png 我在想为毛要选择 ...

  7. PHP 快速建立一个对象

    前言 PHP 中的数组(尤其关联数组)是经常使用的 —— 因为方便.在一些框架中也经常见到返回数组格式的配置参数.然而有些时候可能需要对象而非数组类型的配置参数,在查阅网络资料后找到了方法,作以记录. ...

  8. 实现在点击asp:button按钮后,不刷新当前页面

    方法1:return false <asp:Button ID="Button1" runat="server" Text="Button&qu ...

  9. 关于DataTable.Select不到数据的一种解决方案

    网上有很多说的,试过,都没用.自己研究了一下,解决方案如下: 建立dataview,用dv.rowfilter,就可以取到了,然后TOTABLE即可. 代码如下:(只看中间那几句即可) private ...

  10. .pnts点云

    一种3d tiles格式 MIME格式: <configuration> <system.webServer> <staticContent> <remove ...