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. CRM项目的整理---第一篇

    CRM:cunstomer relationship management  客户管理系统 1.项目的使用者:销售  班主任    讲师  助教 2.项目的需求分析 2.1.注册 2.2.登录 2.3 ...

  2. 好客租房14-在jsx中使用javascript表达式的注意点

    注意点 单大括号中可以使用任意的表达式 jsx自身也是js表达式 注意:js中的对是一个例外 写在style样式中 //导入react     import React from "reac ...

  3. Python常用标准库(pickle序列化和JSON序列化)

    常用的标准库 序列化模块 import pickle 序列化和反序列化 把不能直接存储的数据变得可存储,这个过程叫做序列化.把文件中的数据拿出来,回复称原来的数据类型,这个过程叫做反序列化. 在文件中 ...

  4. LC T668笔记 & 有关二分查找、第K小数、BFPRT算法

    LC T668笔记 [涉及知识:二分查找.第K小数.BFPRT算法] [以下内容仅为本人在做题学习中的所感所想,本人水平有限目前尚处学习阶段,如有错误及不妥之处还请各位大佬指正,请谅解,谢谢!] !! ...

  5. NPM Error:gyp: No Xcode or CLT version detected!

    问题 最近在macOS Catalina中使用npm安装模块,经常会出现如下错误: > node-gyp rebuild No receipt for 'com.apple.pkg.CLTool ...

  6. dotnet core 也能协调分布式事务啦!

    2022 年 5 月 24 日,我们发布了 DBPack v0.1.0 版本,该版本主要 release 了分布式事务功能.在我们的规划里,DBPack 是要支持所有微服务开发语言协调分布式事务的,但 ...

  7. 2021.05.04【NOIP提高B组】模拟 总结

    T1 题目大意, \(S_{i,j}=\sum_{k=i}^j a_k\) ,求 \(ans=\min\{ S_{i,j}\mod P|S_{i,j}\mod P\ge K \}\) 其中 \(i\l ...

  8. c++ 超长整数乘法 高精度乘法

    c++ 超长整数乘法 高精度乘法 解题思路 参考加法和减法解题思路 乘法不是一位一位的按照手算的方式进行计算,而是用循环用一个数的某一位去乘另外一个数 打卡代码 #include<bits/st ...

  9. python中 OS模块中 os.path.join() 函数用法简介

    基础用法 os.path.join() 用于拼接文件的路径,可以传入多个待拼接的路径 若各个路径之间不存在 " / ", 则其会自动为各个路径之间增加连接符 " / &q ...

  10. 我的开源之路:耗时 6 个月发布线程池框架,GitHub 1.7k Star!

    文章首发在公众号(龙台的技术笔记),之后同步到掘金和个人网站:xiaomage.info Hippo4J 线程池框架经过 6 个多月的版本迭代,2022 年春节当天成功发行了 1.0.0 RELEAS ...