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);
}

方法引用_通过this引用本类的成员方法和方法引用_类的构造器(构造方法)引用和数组的构造器引用的更多相关文章

  1. java关键字extends(继承)、Supe(父类引用空间)、 This(方法调用者对象)、Instanceof(实例类型-判断对象是否属于某个类)、final(最终)、abstract(抽象) 、interface(接口)0

    java 继承使用关键字extends   继承的作用:减少代码量,优化代码 继承的使用注意点: 1子类不能继承父类的私有变量 2.子类不能继承父类的构造方法 3.子类在调用自己的构造方法时 会默认调 ...

  2. java面试题:当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?

    答:是值传递.Java编程语言只有值传递参数. 当一个对象实例作为一个参数被传递到方法中时,参数的值就是该对象的引用一个副本.指向同一个对象,对象的内容可以在被调用的方法中改变,但对象的引用(不是引用 ...

  3. C# 中利用反射机制拷贝类的字段和属性(拷贝一个类对象的所有东西付给另一个类对象,而不是付给引用地址)

    from:https://blog.csdn.net/poxiaohai2011/article/details/27555951 //C# 中利用反射机制拷贝类的字段和属性(拷贝一个类对象的所有东西 ...

  4. Shell脚本中引用、调用另一个脚本文件的2种方法

    Shell脚本中引用.调用另一个脚本文件的2种方法 http://www.jb51.net/article/67903.htm

  5. Objective-C 笔记二 类、对象和方法

    对象就是一个物件.面向对象的程序设计可以看成一个物件和你想对它做的事情.这与C语言不同,C语言通常称为过程性语言.在C语言中,通常是先考虑要做什么,然后才关注对象,这几乎总是与面相对象的思考过程相反. ...

  6. 实习第一周第一天:接口 extends是继承类,implement是实现接口,原接口里面的方法填充,方法名也是不变,重写override是父类的方法名不变,把方法体给改了

    一.定义 Java接口(Interface),是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为( ...

  7. C# 中一些类关系的判定方法 C#中关于增强类功能的几种方式 Asp.Net Core 轻松学-多线程之取消令牌

    1.  IsAssignableFrom实例方法 判断一个类或者接口是否继承自另一个指定的类或者接口. public interface IAnimal { } public interface ID ...

  8. perl 引用(数组和hash引用) --- perlreftut - Mark 的一个简单的'引用'教程 ---Understand References Today. --Mark Jason Dominus, Plover Systems (mjd-perl-ref+@plover.com)

    https://blog.csdn.net/fangwei1235/article/details/8570886 首页 博客 学院 下载 论坛 APP 问答 商城 活动 VIP会员 招聘 ITeye ...

  9. 类的封装,property特性,类与对象的绑定方法和非绑定方法,

    类的封装 就是把数据或者方法封装起来 为什么要封装 封装数据的主要原因是:保护隐私 封装方法的主要原因是:隔离复杂度(快门就是傻瓜相机为傻瓜们提供的方法,该方法将内部复杂的照相功能都隐藏起来了,比如你 ...

随机推荐

  1. Volatile的学习

    首先先介绍三个性质 可见性 可见性代表主内存中变量更新,线程中可以及时获得最新的值. 下面例子证明了线程中可见性的问题 由于发现多次执行都要到主内存中取变量,所以会将变量缓存到线程的工作内存,这样当其 ...

  2. 1903021121—刘明伟—Java第六周作业—java类

    项目   内容 课程班级博客链接  19信计班(本) 作业要求链接 第6周作业 扩展阅读 java面向对象的概念和定义 作业要求 每道题要有题目,代码,截图(只截运行结果). 题目1: 一个Phone ...

  3. git clone指定分支

    技术背景 Git是代码版本最常用的管理工具,此前也写过一篇介绍Git的基本使用的博客,而本文介绍一个可能在特定场景下能够用到的功能--直接拉取指定分支的内容. Git Clone 首先看一下如果我们按 ...

  4. spring-boot rest controller 使用枚举作为参数,重写反序列化实现任意值转枚举类型

    目录 BaseEnum MyEnum StringToEnumConverterFactory FormatterConfig DTO RestController 参考 BaseEnum packa ...

  5. 好客租房27-state的基本使用

    5.1state的基本使用 状态:数据 是组件内部的私有数据 只能再组件内部使用 state的值是对象 表示一个组件中可以有多个数据 获取数据 this.state //导入react     imp ...

  6. MySQL之SQL语句优化

    语句优化 即优化器利用自身的优化器来对我们写的SQL进行优化,然后再将其放入InnoDB引擎中执行. 条件简化 移除不必要的括号 select * from x where ((a = 5)); 上面 ...

  7. Vue基础之 动态组件

    为什么会有动态组件> vue 通过组件机制 实现的页面功能的模块化处理,通常情况下 我们在vue中使用组件  就是先定义组件 然后再需要的地方 插入组件即可 但是在某些情况下 需要根据不同的需求 ...

  8. go-zero微服务实战系列(三、API定义和表结构设计)

    前两篇文章分别介绍了本系列文章的背景以及根据业务职能对商城系统做了服务的拆分,其中每个服务又可分为如下三类: api服务 - BFF层,对外提供HTTP接口 rpc服务 - 内部依赖的微服务,实现单一 ...

  9. 分享一个网上搜不到的「Redis」实现「聊天回合制」的方案

    前言 为什么说网上搜不到,因为关于聊天回合制的方案作者本人快把百度搜秃噜了也没找到,好在最终是公司一个关系不错的大佬帮提供了点思路,最终作者将其完整实现了出来. 分享出来大家可以收藏,万一你哪天也碰到 ...

  10. 关于Node.js 链接mysql超时处理(默认8小时)

    备注:这是在pm2配置node环境下,超过8小时mysql自动关闭的情况下出现的解决方法:1.封装mysql.js var mysql = require('mysql'); var connecti ...