package com.yang.Test.ThisMethodReference;

/**
* 通过this引用本类的成员方法
*/
public class Husband {
//定义一个买房子的方法
public void buyHouse() {
System.out.println("北京二环内买一条房子");
} //定义一个结婚的方法,参数传递Richable接口
public void marry(Richable r){
r.buy();
} //定义一个非常高兴的方法
public void soHappy(){
/* //调用结婚的方法,方法的参数Richable是一个函数式接口,传递Lambda表达式
marry(() -> {
//使用this.成员方法调用本类买房子方法
this.buyHouse();
});*/ /**
* 使用方法引用优化Lambda表达式
* this是已经存在的
* 本类的成员方法buyHouse也是已经存在的
* 所以我们可以直接使用this引用本类的成员方法buyHouse
*/ marry(this::buyHouse);
} public static void main(String[] args) {
Husband husband = new Husband();
husband.soHappy();
} }
package com.yang.Test.ThisMethodReference;

/**
* 定义一个富有的函数式接口
*/
@FunctionalInterface
public interface Richable {
//定义一个想买什么就买什么的方法
void buy();
}

方法引用_类的构造器(构造方法)引用

package com.yang.Test.ConstructorMethodReference;

/**
* 类的构造器(构造方法)引用
*/
public class Test {
//定义一个方法,参数传递兴民共和PersonBuilder接口,方法中通过姓名创建Person对象
public static void printName(String name, PersonBuilder personBuilder) {
Person person = personBuilder.builderPerson(name);
System.out.println(person);
} public static void main(String[] args) {
//调用printName方法,方法的参数PersonBuilder接口是一个函数式接口可以传递Lambda
printName("迪丽热巴",name -> new Person(name));
printName("迪丽热巴",Person::new);
}
}
package com.yang.Test.ConstructorMethodReference;

/**
* 定义一个创建Person对象的函数式接口
*/
@FunctionalInterface
public interface PersonBuilder {
//定义一个方法,根据传递的姓名,创建Person对象返回
Person builderPerson(String name);
}
package com.yang.Test.ConstructorMethodReference;

public class Person {
private String name; @Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
'}';
} public Person(String name) {
this.name = name;
} public Person() { } public String getName() {
return name;
} public void setName(String name) {
this.name = name;
}
}

数组的构造器引用

package com.yang.Test.ArrayMethodReference;

/**
* 数组的构造器引用
*/
public class Test {
/**
* 定义一个方法
* 方法的参数传递创建数组的长度和ArrayBuilder接口
* 方法内部根据传递的长度使用ArrayBuilder中的方法创建数组并返回
*/
public static int[] createArray(ArrayBuilder arrayBuilder, int length) {
int[] ints = arrayBuilder.builderArray(length);
return ints;
} public static void main(String[] args) {
//调用createArray方法传递数组的长度和Lambda
int[] array = createArray(length -> {
//根据数组的长度创建数组并返回
return new int[length];
}, 5); System.out.println(array.length);
for (int i : array) {
System.out.println(i);
} /**
* 使用方法引用优化Lambda表达好似
* 已知创建的就是int[]数组
* 数组的长度也是已知的
* 就可以使用方法引用
* int[]引用new,根据参数传递的长度来创建数组
*/ int[] array1 = createArray(int[]::new, 10);
System.out.println(array1.length);
}
}
package com.yang.Test.ArrayMethodReference;

/**
* 定义一个创建数组的函数式接口
*/
@FunctionalInterface
public interface ArrayBuilder {
//定义一个创建int类型数组的方法,参数传递数组的长度,返回创建好的int类型数组
int[] builderArray(int length);
}

最新文章

  1. Webpack参考资料
  2. 通过SharePoint Designer对SharePoint 2010的Master Page进行自定制
  3. 查看、关闭某一runlevel下自动启动的服务
  4. Zabbix监控和分布式部署实施方案
  5. Hadoop学习笔记(5) ——编写HelloWorld(2)
  6. 学学Whatsapp,如何让自己挣160亿美金,然后退休?开发个J2ME应用。
  7. 一键安装IIS的点点滴滴——For所有Microsoft的操作系统(下)
  8. 基于HBase的手机数据备份系统 .
  9. 使用olami sdk实现一个语音查询股票的iOS程序
  10. Centos7.4下用Docker-Compose部署WordPress
  11. 理解 static (深入了解JAVA虚拟机)
  12. CountDownLatch简单使用
  13. UIKit 框架之UIControl
  14. 两个有用Oracle运算:intersect和minus运算
  15. (连通图 模板题 出度和入度)Network of Schools--POJ--1236
  16. python迭代、列表生成式
  17. SDR软件无线电知识要点(三)EVM
  18. linux配置sudo
  19. 用Python生成词云
  20. 安装python 2.7

热门文章

  1. 【面试普通人VS高手系列】Spring中事务的传播行为有哪些?
  2. 『忘了再学』Shell基础 — 14、环境变量(二)
  3. 基于surging网络组件多协议适配的平台化发展
  4. 编程语言与python与pycharm的下载
  5. 安装Supervisor到CentOS(YUM)
  6. PyTorch框架起步
  7. Redis概述及基本数据结构
  8. AT32F415 修改时钟和晶振方法(原创)
  9. 基于Streamlit_prophet玩转Prophet时序预测
  10. ExtJS直接加载HTML页面