方法引用的基本使用(代码片段)

liuyang-520 liuyang-520     2023-03-18     237

关键词:

1、例子中用到的函数式接口

package com.ly.demo.java8;

/**
 * @author liuyang
 * @create 2020-05-17 23:16
 */
@FunctionalInterface
public interface IntArrayBuilder 
    int[] buildIntArray(int len);
package com.ly.demo.java8;

/**
 * @author liuyang
 * @create 2020-05-17 21:57
 */
// 函数接口,有且仅有一个抽象方法的接口
@FunctionalInterface
public interface MyInterface 
    void print(String str);
package com.ly.demo.java8;

/**
 * @author liuyang
 * @create 2020-05-17 23:00
 */
@FunctionalInterface
public interface MyObjBuilder 
    MyObj build(String name,Integer age);

 

2、例子中用到的类

package com.ly.demo.java8;

/**
 * @author liuyang
 * @create 2020-05-17 21:57
 */
public class MyObj extends MyObjSup 
    public String name;
    public Integer age;

    public MyObj() 
    

    public MyObj(String name, Integer age) 
        this.name = name;
        this.age = age;
    

    public void printStr(MyInterface mi, String str) 
        mi.print(str);
    

    public void printUpperCase(String str) 
        System.out.println(str.toUpperCase());
    

    public static void printLowerCase(String str) 
        System.out.println(str.toLowerCase());
    

    @Override
    public void sayHello(String s) 
        System.out.println("MyObj-你好,我是:"+s);
    

    public void say1() 
        // 引用父类的方法
        printStr(super::sayHello,"小明");
    

    public void say2() 
        // 引用本类的方法
        printStr(this::sayHello,"小芳");
    

    MyObj buildMyObj(MyObjBuilder myObjBuilder,String name,Integer age) 
        return myObjBuilder.build(name,age);
    

    int[] createIntArray(int len,IntArrayBuilder iab) 
        return iab.buildIntArray(len);
    
package com.ly.demo.java8;

/**
 * @author liuyang
 * @create 2020-05-17 22:31
 */
public class MyObjSup 
    public void sayHello(String s) 
        System.out.println("MyObjSup-你好,我是:"+s);
    

 

3、测试类

package com.ly.demo.java8;

import org.junit.Test;

/**
 * @author liuyang
 * @create 2020-05-17 22:00
 */
public class MethodRefTest 
    @Test
    public void test1() 
        MyObj myObj = new MyObj();
        // 函数式接口都可以用Lambda表达式代替
        myObj.printStr(s -> System.out.println(s),"hello1");
    

    @Test
    public void test2() 
        MyObj myObj = new MyObj();
        // Lambda表达式也可以用方法引用替代
        // 被引用方法的入参必须和函数式接口方法的入参一致
        myObj.printStr(System.out::println,"hello2");
    

    @Test
    public void test3() 
        MyObj myObj = new MyObj();
        // 引用对象的实例方法
        myObj.printStr(myObj::printUpperCase,"hello3");
    

    @Test
    public void test4() 
        MyObj myObj = new MyObj();
        // 引用类的静态方法
        myObj.printStr(MyObj::printLowerCase,"HELLO4");
    

    @Test
    public void test5() 
        // 测试引用父类的方法
        new MyObj().say1();
    

    @Test
    public void test6() 
        // 测试引用本类的方法
        new MyObj().say2();
    

    @Test
    public void test7() 
        // 测试引用构造方法
        MyObj myObj = new MyObj().buildMyObj(MyObj::new,"liuyang",18);
        System.out.println(myObj.name);
        System.out.println(myObj.age);
    

    @Test
    public void test8() 
        // 测试引用数组的构造方法
        int[] arr = new MyObj().createIntArray(10,int[]::new);
        System.out.println(arr.length);
    

 

前端css变量简介及基本使用方法(代码片段)

CSS变量(自定义属性)在某个地方存储一个值,然后在其他许多地方引用它,另一个好处是语义化的标识。背景复杂的网站都会有大量的CSS代码,通常也会有许多重复的值。举个例子,同样一个颜色值可能在成千上百个地方被使... 查看详情

core的session基本使用(代码片段)

第一步先注册session:在Startup.cs文件中的ConfigureServices方法中添加:services.AddSession();在Startup.cs文件中的Configure方法中加上这一句代码app.UseSession();第二步从nuget安装Microsoft.AspNetCore.Mvc引用,直接使用自带的方法进行设置和获取sessi... 查看详情

string是值传递还是引用传递(代码片段)

...了一个很容易犯错的地方。我把一个String类型的参数传入方法,并在方法内改变了引用的值。然后在方法外使用这个值,发现这个String还是之前的值,并没有改变。java在传参时分为值 传递 和 引用传递 。参数为... 查看详情

java基础数组的基本使用(代码片段)

...用指向同一个数组1.6数组异常1.7获取数组长度1.数组作为方法的参数1.9数组作为方法的返回值1.数组1.1数组的概念是一种容器,可以同时存放多个数据特点:数组是一种引用数据类型数组当中的多个数据,类型必须统... 查看详情

java包装器类型(代码片段)

...从而出现了包装器类型,并且包装器添加了更多的属性和方法。如我们在使用集合类型Collection的时候就一定要使用包装类型而非基本类型,它相当于将基本类型"包装起来",使它具有了对象的性质,丰富了基本类型的操作。  ... 查看详情

方法引用(methodreferences)(代码片段)

*方法引用的使用**1.使用情境:当要传递给Lambda体的操作,已经有实现的方法了,可以使用方法引用!**2.方法引用,本质上就是Lambda表达式,而Lambda表达式作为函数式接口的实例。所以*方法引用,也是函数式接口的实例。**3.使... 查看详情

jdk1.8新特性——方法引用构造器引用及数组引用详解(代码片段)

目录一、方法引用1、方法引用的理解2、方法引用的基本语法3、方法引用的注意事项二、方法引用的示例1、方法引用语法(对象的引用::实例方法名)2、方法引用语法(类名::静态方法名)3、方法引用语法(... 查看详情

面试官:string是值传递还是引用传递(代码片段)

...,面试攻略,高效学习资料等把一个String类型的参数传入方法,并在方法内改变了引用的值。然后在方法外使用这个值,发现这个String还是之前的值,并没有改变。这里要向大家介绍一下,大家都知道java在传参时分为值传递和... 查看详情

004方法引用(代码片段)

...建的,但是有的时候我们可能使用的lambda就是现在已有的方法了.  毕竟lambda就是一个方法的实现.  在jdk8之中定义了方法引用的概念,这可以让我们实现方法的复用,请记住,方法引用仅仅只是lambda的一种简化写法而已,没有什么... 查看详情

jquery的基本使用方法(代码片段)

...("p").hide()-隐藏所有段落大专栏 JQUERY的基本使用方法$(".test").hide()-隐藏所有class="test"的所有元素$("#test").hide()-隐藏所有id="test"的元素#Jquery选择器元素选择器123$("p")选取<p>元素。$("p.i... 查看详情

markdown基本语法(代码片段)

...可表示一至六阶标题,注意最后一个“#”号后要用空格引用的显示在引用前面的每一行使用“>”来标识段落使用空行进行分段可以嵌套,加上相应数量的“>”即可可以在引用的内部使用其它语法分隔线的显示可以使用三个... 查看详情

equals方法和==的使用(代码片段)

equals方法的使用equals方法源码展示:publicbooleanequals(Objectobj)return(this==obj);解析:equals方法默认比较使用的是==符号进行比较的,也就是说,比较的是值直接使用==符号比较的就是值是否相等.地址值也要相等.当比较的类型是基本类型的... 查看详情

2020年8月2日方法的传递机制(参数是基本数据类型参数是引用数据类型)(代码片段)

/*方法的参数传递机制:实参-->形参(1)形参是基本数据类型实参赋值给形参的是数据值,形参值的修改不影响实参,因为实参是“copy,复制”了一份数据值给形参*/classTest02_PassParamValuepublicstaticvoidmain(String[]args)intx=1;int... 查看详情

方法引用(代码片段)

(一)方法引用解释  方法引用通过方法的名字来指向一个方法。  方法引用可以使语言的构造更紧凑简洁,减少冗余代码。  方法引用使用一对冒号 :: (二)代码示例  1Person类编写packagecom.example.demo;importjava.t... 查看详情

c#委托基本例子(代码片段)

...的基本概念,  委托(Delegate)是存有对某个方法的引用的一种引用类型变量;  引用可在运行时被改变;  委托(Delegate)特别用于实现事件和回调方法;  所有的委托(Delegate)都派生自Syst... 查看详情

函数式接口之方法引用(代码片段)

文章目录JAVA新特性的方法引用常用使用方式:代码:JAVA新特性的方法引用方法引用主要指通过方法的名字来指向一个方法而不需要为方法引用提供方法体,该方法的调用交给函数式接口执行方法引用是在特定场景下lambda... 查看详情

android使用ndk---函数参数传递-基本类型和数组(代码片段)

... 基本数据类型的传输a)        上层定义一个native的方法& 查看详情

数组实验(代码片段)

...与要求:1.掌握一维和多维数组的定义和数组元素的使用方法。2.了解一维和多维数组初始化的方法。3.学习一维和多维数组的基本方法。4.掌握C语言提供的对字符串进行处理的基本函数库。5.掌握字符数组的定义、初始化方法及... 查看详情