Java基础教程——方法引用
方法引用
Lambda表达式的代码,是否可以再简洁?——方法引用
对象/类名::方法名
参数都不用写明。
import java.util.function.Consumer;
public class 方法引用 {
static void printStr(Consumer<String> c, String s) {
// 借助Consumer接口,accept方法可以接收参数
c.accept(s);
}
public static void main(String[] args) {
System.out.println("------ 方法引用(关注做什么,不管怎么做)");
printStr(s -> System.out.println(s), "Lambda写法");
// 使用方法引用的前提:
// |--对象已经存在(System.out)
// |--方法也存在(println())
// |--参数是方法可接收类型(String)
printStr(System.out::println, "方法引用:连参数都不写");
}
}
------ 方法引用(关注做什么,不管怎么做)
Lambda写法
方法引用:连参数都不写
引用普通方法和静态方法
import java.util.function.Consumer;
public class 方法引用2 {
public static void main(String[] args) {
// -----------------------
String str = "Journey to the west";
printStr(s -> {
MyString ms = new MyString();
ms.printUpperCase(s);
}, str);
MyString ms = new MyString();
printStr(ms::printUpperCase, str);
System.out.println("--- 引用静态方法,直接类名::方法名");
printStr(MyString::staticPrint, "Journey to the west");
}
static void printStr(Consumer<String> p, String s) {
// 借助Consumer接口,accept方法可以接收参数
p.accept(s);
}
}
class MyString {
public void printUpperCase(String s) {
System.out.println(s.toUpperCase());
}
public static void staticPrint(String s) {
System.out.println(s.toLowerCase());
}
}
JOURNEY TO THE WEST
JOURNEY TO THE WEST
--- 引用静态方法,直接类名::方法名
journey to the west
引用父类方法(super)和自身方法(this)
import java.util.function.Consumer;
public class 方法引用3 {
public static void main(String[] args) {
new S().show();
}
}
class F {
void m(String s) {
System.out.println("父类方法:" + s);
}
}
class S extends F {
@Override
void m(String s) {
System.out.println("子类方法:" + s);
}
public void invoke(Consumer<String> c, String s) {
c.accept(s);
}
public void show() {
// Lambda表达式写法
invoke((s) -> {
F f = new F();
f.m(s);
this.m(s);
}, "Lambda表达式写法");
invoke(super::m, "引用方法,使用super::");
invoke(this::m, "引用方法,使用this::");
}
}
父类方法:Lambda表达式写法
子类方法:Lambda表达式写法
父类方法:引用方法,使用super::
子类方法:引用方法,使用this::
引用构造方法(实例化对象)
import java.util.Arrays;
import java.util.function.Function;
class Cat {
private String name;
public Cat(String name) {
super();
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
public class 方法引用4new {
public static void main(String[] args) {
createCat("Lambda(1)", (name) -> {
return new Cat(name);
});
createCat("Lambda(2)简化,省略{}、return、;", (name) -> new Cat(name));
createCat("方法引用:类::new", Cat::new);
// ---创建数组
createArray(10, (len) -> new Cat[len]);
createArray(10, Cat[]::new);
}
static void createCat(String name, Function<String, Cat> f) {
Cat c = f.apply(name);
System.out.println(c.getName());
}
static void createArray(Integer len, Function<Integer, Cat[]> f) {
Cat[] c = f.apply(len);
System.out.println(Arrays.toString(c));
}
}
Lambda(1)
Lambda(2)简化,省略{}、return、;
方法引用:类::new
[null, null, null, null, null, null, null, null, null, null]
[null, null, null, null, null, null, null, null, null, null]
Java基础教程——方法引用的更多相关文章
- Java基础教程(18)--继承
一.继承的概念 继承是面向对象中一个非常重要的概念,使用继承可以从逻辑和层次上更好地组织代码,大大提高代码的复用性.在Java中,继承可以使得子类具有父类的属性和方法或者重新定义.追加属性和方法. ...
- Java基础教程(12)--深入理解类
一.方法的返回值 当我们在程序中调用方法时,虚拟机将会跳转到对应的方法中去执行.当以下几种情况发生时,虚拟机将会回到调用方法的语句并继续向下执行: 执行完方法中所有的语句: 遇到return语句: ...
- Java基础教程:注解
Java基础教程:注解 本篇文章参考的相关资料链接: 维基百科:https://zh.wikipedia.org/wiki/Java%E6%B3%A8%E8%A7%A3 注解基础与高级应用:http: ...
- Java基础教程:面向对象编程[2]
Java基础教程:面向对象编程[2] 内容大纲 访问修饰符 四种访问修饰符 Java中,可以使用访问控制符来保护对类.变量.方法和构造方法的访问.Java 支持 4 种不同的访问权限. default ...
- Java基础教程:面向对象编程[1]
Java基础教程:面向对象编程 内容大纲 Java语言概述 Java语言特点 1.Java为纯面向对象的语言,它能够直接反映现实生活中的对象.总之,Everything is object! 2.平台 ...
- Java基础教程:面向对象编程[3]
Java基础教程:面向对象编程[3] 内容大纲 基础编程 获取用户输入 java.util.Scanner 是 Java5 的新特征,我们可以通过 Scanner 类来获取用户的输入.我们可以查看Ja ...
- Java基础教程(25)--I/O
一.I/O流 I/O流表示输入源或输出目标.流可以表示许多不同类型的源和目标,例如磁盘文件.设备.其他程序等. 流支持许多不同类型的数据,包括字节.原始数据类型.字符和对象等.有些流只传递数据 ...
- Java基础教程:Java内存区域
Java基础教程:Java内存区域 运行时数据区域 Java虚拟机在执行Java程序的过程种会把它所管理的内存划分为若干个不同的数据区域.这些区域都有各自的用途,以及创建和销毁的时间,有的区域随着虚拟 ...
- Java基础教程:垃圾回收
Java基础教程:垃圾回收 垃圾回收 垃圾回收(Garbage Collection,GC),顾名思义是释放垃圾占用的空间,防止内存泄漏.有效的使用可以使用的内存,对内存堆中已经死亡的或者长时间没有使 ...
随机推荐
- eclipse配置springMVC
基础还是创建一个Dynamic web project. WEB-INF/lib中添加必需的jar. commons-logging-1.1.3.jar spring-aop-4.3.6.RELEAS ...
- Windows定时任务copy到nfs目录
@echo off mount 192.168.5.10:/data/test x: xcopy /y "D:\backup\mysql\20200316_230000.sql.tar.gz ...
- Java学习的第三十九天
1.例3.7 100~200之间全部素数 package bgio; public class cjava { public static void main(String[]args) { int ...
- Java学习的第二十四天
1. 目录管理 2.文件方法太多记不清 3.明天学习流和流的分类
- 重要 | Spark和MapReduce的对比,不仅仅是计算模型?
[前言:笔者将分上下篇文章进行阐述Spark和MapReduce的对比,首篇侧重于"宏观"上的对比,更多的是笔者总结的针对"相对于MapReduce我们为什么选择Spar ...
- 对比JAVA、Python、C、Go运行时间,我惊呆了!!!
对比JAVA.Python.C.Go运行时间,我惊呆了!!! 周末在寝室刷完算法,想放松一下,于是做了一个实验:用现在主流的几种编程语言对0 - (10000000 - 1)求和,结果我惊呆了,话不多 ...
- 3.6 栈 ADT - 3.7 队列 ADT
3.6 栈 ADT 栈是限制插入和删除只能在一个位置上进行的表,叫做栈的顶部.对栈的基本操作有进栈和出栈,进栈在顶部插入元素,出栈删除最后插入的元素. 栈是一个表,因此任何实现表的方法都能实现栈.显然 ...
- learning to Estimate 3D Hand Pose from Single RGB Images论文理解
持续更新...... 概括:以往很多论文借助深度信息将2D上升到3D,这篇论文则是想要用网络训练代替深度数据(设备成本比较高),提高他的泛性,诠释了只要合成数据集足够大和网络足够强,我就可以不用深度信 ...
- 8、Python语法之流程控制
一 引子 流程控制即控制流程,具体指控制程序的执行流程,而程序的执行流程分为三种结构:顺序结构(之前我们写的代码都是顺序结构).分支结构(用到if判断).循环结构(用到while与for) 二 分支结 ...
- JavaSE基础语法学习-方法&数组
方法 Java方法是语句的集合,它们在一起执行一个功能. 方法是解决一类问题的步骤的有序组合 方法包含于类或对象中 方法在程序中被创建,在其他地方被引用 设计方法的原则:方法的本意是功能块,就是实现某 ...