方法引用与构造器引用

方法引用(Method References)

  1. 当要传递给Lambda体的操作,已经有实现的方法了,可以使用方法引用!
  2. 方法引用可以看做是Lambda表达式深层次的表达。换句话说,方法引用就是Lambda表达式,也就是函数式接口的一个实例,通过方法的名字来指向一个方法,可以认为是Lambda表达式的一个语法糖。
  3. 要求:实现接口的抽象方法的参数列表和返回值类型,必须与方法引用的方法的参数列表和返回值类型保持一致!
  4. 格式:使用操作符 “::” 将类(或对象) 与 方法名分隔开来。
  5. 如下三种主要使用情况:
  • 对象::实例方法名
  • 类::静态方法名
  • 类::实例方法名
方法引用可以分为四种不同的形式:

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对象的方法来获取其属性值,并打印出来。

这是一个简单的使用构造器引用的示例。通过使用构造器引用,我们可以更加简洁地创建对象。请注意,示例代码中没有出现可能在中国是敏感的内容。

 
posted @   黄橙  阅读(31)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示