方法引用与构造器引用
方法引用(Method References)
- 当要传递给Lambda体的操作,已经有实现的方法了,可以使用方法引用!
- 方法引用可以看做是Lambda表达式深层次的表达。换句话说,方法引用就是Lambda表达式,也就是函数式接口的一个实例,通过方法的名字来指向一个方法,可以认为是Lambda表达式的一个语法糖。
- 要求:实现接口的抽象方法的参数列表和返回值类型,必须与方法引用的方法的参数列表和返回值类型保持一致!
- 格式:使用操作符 “::” 将类(或对象) 与 方法名分隔开来。
- 如下三种主要使用情况:
- 对象::实例方法名
- 类::静态方法名
- 类::实例方法名
方法引用可以分为四种不同的形式:
1. 静态方法引用:引用静态方法。
2. 实例方法引用:引用特定对象的实例方法。
3. 构造方法引用:引用构造方法来创建新对象。
4. 类名引用:引用类中的方法。
下面是一些代码示例:
1. 静态方法引用: // 定义一个静态方法 public static void printMessage(String message) { System.out.println(message); } // 使用方法引用引用静态方法 Consumer<String> consumer = MyClass::printMessage; consumer.accept("Hello World"); // 输出:Hello World 2. 实例方法引用: public class MyClass { public void printMessage(String message) { System.out.println(message); } } // 创建一个实例对象 MyClass myObj = new MyClass(); // 使用方法引用引用实例方法 Consumer<String> consumer = myObj::printMessage; consumer.accept("Hello World"); // 输出:Hello World 3. 构造方法引用: public class MyClass { public MyClass() { System.out.println("New object created."); } } // 使用方法引用引用构造方法 Supplier<MyClass> supplier = MyClass::new; MyClass myObj = supplier.get(); // 输出:New object created. 4. 类名引用: public class MyClass { public static void printMessage(String message) { System.out.println(message); } } // 使用方法引用引用类中的静态方法 Consumer<String> consumer = MyClass::printMessage; consumer.accept("Hello World"); // 输出:Hello World
构造器引用
格式: ClassName::new
与函数式接口相结合,自动与函数式接口中方法兼容。
可以把构造器引用赋值给定义的方法,要求构造器参数列表要与接口中抽象
方法的参数列表一致!且方法的返回值即为构造器对应类的对象。
构造器引用是Java 8中引入的一种新特性,它允许我们通过使用类的构造器来创建对象。构造器引用可以简化代码,使代码更加简洁和易读。
下面是一个使用构造器引用的示例代码:
首先,我们需要定义一个Person类:
public class Person { private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public int getAge() { return age; } }
接下来,我们可以使用构造器引用来创建Person对象。假设我们有一个名为createPerson的方法,它接受一个名字和年龄作为参数,并返回一个新的Person对象:
public class Main { public static void main(String[] args) { // 使用构造器引用来创建Person对象 // Function<String, Person>
BiFunction<String, Integer, Person> createPerson = Person::new;
// 创建一个名为Alice,年龄为20的Person对象 Person alice = createPerson.apply("Alice", 20); // 打印Person对象的信息 System.out.println("Name: " + alice.getName()); System.out.println("Age: " + alice.getAge()); } }
在上面的示例代码中,我们使用了构造器引用`Person::new`来创建Person对象。`createPerson`函数接受一个名字和年龄作为参数,并通过构造器引用来创建一个新的Person对象。然后,我们可以通过调用Person对象的方法来获取其属性值,并打印出来。
这是一个简单的使用构造器引用的示例。通过使用构造器引用,我们可以更加简洁地创建对象。请注意,示例代码中没有出现可能在中国是敏感的内容。
本文来自博客园,作者:黄橙,转载请注明原文链接:https://www.cnblogs.com/RedOrange/p/17702651.html
分类:
java / java 8
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~