2025年3月27日 星期四 甲辰(龙)年 月廿六 设为首页 加入收藏
rss
您当前的位置:首页 > 计算机 > 编程开发 > Java

Java方法引用(Java8新特性)

时间:10-10来源:作者:点击数:42

方法引用指的是可以直接引用 Java 类或对象的方法。它可以被看成是一种更加简洁易懂的 Lambda 表达式,表达式如下所示:

Arrays.sort(people, Comparator.comparing(Person::getAge));

方法引用共有下面 4 种形式:

  • 引用构造方法:ClassName::new
  • 引用类静态方法:ClassName::methodName
  • 引用特定类的任意对象方法:ClassName::methodName
  • 引用某个对象的方法:instanceName::methodName
示例

下面给出一个使用方法引用的例子,Java 代码如下: 

  • import java.util.Arrays;
  • import java.util.Comparator;
  • import java.util.function.Supplier;
  • class Person {
  • private String name;
  • private int age;
  • public Person() {
  • }
  • public Person(String name, int age) {
  • this.name = name;
  • this.age = age;
  • }
  • public static Person getInstance(final Supplier<Person> supplier) {
  • return supplier.get();
  • }
  • public void setAge(int age) {
  • this.age = age;
  • }
  • public int getAge() {
  • return age;
  • }
  • public String getName() {
  • return name;
  • }
  • public static int compareByAge(Person a, Person b) {
  • return b.age - a.age;
  • }
  • public String toString() {
  • return name + ":" + age;
  • }
  • }
  • class CompareProvider {
  • public int compareByAge(Person a, Person b) {
  • return a.getAge() - b.getAge();
  • }
  • }
  • public class Test {
  • public static void main(String[] args) {
  • //引用构造方法
  • Person p1 = Person.getInstance(Person::new);
  • p1.setAge(19);
  • System.out.println("测试引用构造方法:" + p1.getAge());
  • Person[] people = {new Person("James", 25), new Person("Jack", 21)};
  • //引用特定类的任意对象方法
  • Arrays.sort(people, Comparator.comparing(Person::getAge));
  • System.out.println("测试引用特定类的任意对象方法:");
  • for (Person p : people) {
  • System.out.println(p);
  • }
  • //引用类静态方法
  • Arrays.sort(people, Person::compareByAge);
  • System.out.println("测试引用类静态方法:");
  • for (Person p : people) {
  • System.out.println(p);
  • }
  • //引用某个对象的方法
  • Arrays.sort(people, new CompareProvider()::compareByAge);
  • System.out.println("测试引用某个对象的方法:");
  • for (Person p : people) {
  • System.out.println(p);
  • }
  • }
  • }

程序的运行结果为:

测试引用构造方法:19
测试引用特定类的任意对象方法:
Jack:21
James:25
测试引用类静态方法:
James:25
Jack:21
测试引用某个对象的方法:
Jack:21
James:25

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门