ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

匿名内部类、Lambda表达式、方法引用之个人理解

2022-06-22 01:31:09  阅读:155  来源: 互联网

标签:Test1 String 匿名 Hi Student 方法 public 表达式 Lambda


匿名内部类,没有名字,一般是某个类的子类或接口的实现类。
格式:

父类/接口 对象名 = new 父类/接口(){
	//方法重写
	...
}

Lambda表达式是匿名内部类的简写,且限定该匿名内部类为函数式接口的实现。
只关注参数列表、返回类型和方法体,忽略方法名等无关紧要的因素。

函数式接口,接口中允许有默认方法、静态方法,但有仅只有一个抽象方法

格式:

()->{}
//单参时忽略(),如a->{}
//方法体只有一句,可以忽略{},如a->System.out.println(a);
//方法体只有return一句,可以省return、{},如a->2a

方法引用,当函数式接口的抽象方法与某个类的某个方法 的参数列表、返回类型一致,则可以用Lambda表达式借用这个类的这个方法的方法体
格式:

方法引用与方法的调用有异曲同工之妙,见如下

//1.静态方法的引用
public interface Test{
	public void run(String s);
}
public class Test1{
	public static void say(String hello){
		System.out.println(hello);
	}
}
//调用
Test1.say("Hi");//控制台输出:Hi
//引用
Test t = Test1::say;
t.run("Hi");//控制台输出:Hi

//2.实例方法的引用
public interface Test{
	public void run(String s);
}
public class Test1{
	public void say(String hello){
		System.out.println(hello);
	}
}
//调用
Test1 t1 = new Test1();
t1.say("Hi");//控制台输出:Hi
//引用
Test1 t1 = new Test1();
Test t = t1::say;
t.run("Hi");//控制台输出:Hi

//3.构造方法的引用
public interface Test{
	public Student run(String s,int age);
}
public class Student{
	private String name;
	private int age;
	public Student(String name, int age){
		this.name = name;
		this.age = age;
	}
	public Student(){
	}
	
	
}
//调用
Student tom = new Student("tom",12);
//引用
Student tom = = Student::new;

从某种意义上讲,方法引用是Lambda表达式的简写,借用其他类的方法体,省去了写方法体的过程。由于一些方法的参数只接收函数式接口的实现,所以不能直接通过方法调用代入,通过方法引用,赋予函数式接口的实现的方法体。

标签:Test1,String,匿名,Hi,Student,方法,public,表达式,Lambda
来源: https://www.cnblogs.com/roud/p/16399016.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有