一、基本介紹
Java中::被稱為方法引用(Method Reference),其實就是Lambda表達式的一種簡化寫法。
從Java 8開始,Lambda表達式被廣泛使用,但是當Lambda表達式比較複雜時,可以利用::簡化Lambda表達式的寫法。::是用來訪問類方法、構造方法或者實例方法的。
二、靜態方法引用
靜態方法引用是指引用一個靜態方法,通過類名::methodName的方式進行引用。
public class MethodReferenceDemo {
public static void main(String[] args) {
List<String> names = Arrays.asList("Jennifer", "Kenny", "Alice");
names.forEach(System.out::println);
}
}
上面的代碼中,使用::引用了System.out的println方法。這種寫法等價於使用Lambda表達式:
names.forEach(name -> System.out.println(name));
靜態方法引用可以減少代碼量,使用更加簡潔,易於閱讀和維護。
三、對象方法引用
對象方法引用是指引用一個對象的方法,通過對象名::methodName的方式進行引用。
class Rect {
private int width;
private int height;
public Rect(){}
public Rect(int width, int height) {
this.width = width;
this.height = height;
}
public int getWidth() { return width; }
public int getHeight() { return height; }
public void setWidth(int width) { this.width = width; }
public void setHeight(int height) { this.height = height; }
public void print() { System.out.println("Width:" + width + " , Height:" + height); }
}
public class MethodReferenceDemo {
public static void main(String[] args) {
List<Rect> rects = Arrays.asList(new Rect(1, 3), new Rect(2, 5), new Rect(3, 8));
rects.forEach(Rect::print);
}
}
上面的代碼中,使用::引用了Rect類的print方法。這種寫法等價於使用Lambda表達式:
rects.forEach(rect -> rect.print());
對象方法引用可以讓代碼更加易讀,可以直觀地看到方法是被哪個對象調用的。
四、構造方法引用
構造方法引用是指引用一個構造方法,通過類名::new的方式進行引用。
class Person {
private String name;
private int age;
public Person(String name) {
this.name = name;
}
public Person(String name, int age) {
this(name);
this.age = age;
}
public void introduce() {
System.out.println("Name:" + name + " , Age:" + age);
}
}
public class MethodReferenceDemo {
public static void main(String[] args) {
List<String> names = Arrays.asList("Jennifer", "Kenny", "Alice");
List<Person> persons = names.stream().map(Person::new).collect(Collectors.toList());
persons.forEach(Person::introduce);
}
}
上面的代碼中,使用::引用了Person類的構造方法。這種寫法等價於使用Lambda表達式:
List<Person> persons = names.stream().map(name -> new Person(name)).collect(Collectors.toList());
構造方法引用可以避免手動實現工廠方法,降低代碼的複雜度。
五、總結
Java中的::被稱為方法引用,用於簡化Lambda表達式的寫法。::可以引用靜態方法、對象方法和構造方法。靜態方法引用可以減少代碼量,使得代碼更加簡潔易讀;對象方法引用可以讓代碼更加易讀,可以直觀地看到方法是被哪個對象調用的;構造方法引用可以避免手動實現工廠方法,降低代碼的複雜度。
原創文章,作者:UZGDD,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/333690.html