方法参考:new的位置
method reference: position of new
我知道有四种方法参考:
Class::新
Class::静态方法
实例::实例方法
Class::实例方法
在这个练习中,我发现了另一种形式的方法引用,我想问问你这是怎么可能的。
class Person{
String name;
String dob;
public Person(String name, String dob){
this.name = name; this.dob = dob;
}
}
class MySorter {
public int compare(Person p1, Person p2){
return p1.dob.compareTo(p2.dob);
}
}
public class SortTest {
public static int diff(Person p1, Person p2){
return p1.dob.compareTo(p2.dob);
}
public static int diff(Date d1, Date d2){
return d1.compareTo(d2);
}
public static void main(String[] args) {
ArrayList<Person> al = new ArrayList<>();
al.add(new Person("Paul", "01012000"));
al.add(new Person("Peter", "01011990"));
al.add(new Person("Patrick", "01012002"));
//INSERT CODE HERE
}
}
在这个练习中,有必要指出有多少行可以插入到给定的代码中,彼此独立,以对 al 引用的列表进行排序:
- java.util.Collections.sort(al, (p1, p2)->p1.dob.compareTo(p2.dob));
- java.util.Collections.sort(al, SortTest::diff);
- java.util.Collections.sort(al, new MySorter()::compare);
我认为正确答案是 1 和 2。但是这个练习的答案表明所有行(1、2 和 3)都是正确的。
如何创建 "new Class:staticMethod"?
非常感谢!
A.
所有三个版本都可以工作:
java.util.Collections.sort(al, (p1, p2)->p1.dob.compareTo(p2.dob));
是lambda版本调用SortTest::diff
java.util.Collections.sort(al, SortTest::diff);
将起作用,因为它使用的是对静态方法的方法引用:
public static int diff(Person p1, Person p2){
return p1.dob.compareTo(p2.dob);
}
和
java.util.Collections.sort(al, new MySorter()::compare);
之所以有效,是因为new MySorter()
创建了一个MySorter
类型的对象,然后::compare
将方法引用传递给实例方法compare
,这是合法的[=19] =]
How is it possible to create "new Class:staticMethod"?
有实例NOT无关紧要,编译器会选择className并直接调用静态方法。
图片来源为here。
我知道有四种方法参考:
Class::新
Class::静态方法
实例::实例方法
Class::实例方法
在这个练习中,我发现了另一种形式的方法引用,我想问问你这是怎么可能的。
class Person{
String name;
String dob;
public Person(String name, String dob){
this.name = name; this.dob = dob;
}
}
class MySorter {
public int compare(Person p1, Person p2){
return p1.dob.compareTo(p2.dob);
}
}
public class SortTest {
public static int diff(Person p1, Person p2){
return p1.dob.compareTo(p2.dob);
}
public static int diff(Date d1, Date d2){
return d1.compareTo(d2);
}
public static void main(String[] args) {
ArrayList<Person> al = new ArrayList<>();
al.add(new Person("Paul", "01012000"));
al.add(new Person("Peter", "01011990"));
al.add(new Person("Patrick", "01012002"));
//INSERT CODE HERE
}
}
在这个练习中,有必要指出有多少行可以插入到给定的代码中,彼此独立,以对 al 引用的列表进行排序:
- java.util.Collections.sort(al, (p1, p2)->p1.dob.compareTo(p2.dob));
- java.util.Collections.sort(al, SortTest::diff);
- java.util.Collections.sort(al, new MySorter()::compare);
我认为正确答案是 1 和 2。但是这个练习的答案表明所有行(1、2 和 3)都是正确的。
如何创建 "new Class:staticMethod"?
非常感谢!
A.
所有三个版本都可以工作:
java.util.Collections.sort(al, (p1, p2)->p1.dob.compareTo(p2.dob));
是lambda版本调用SortTest::diff
java.util.Collections.sort(al, SortTest::diff);
将起作用,因为它使用的是对静态方法的方法引用:
public static int diff(Person p1, Person p2){
return p1.dob.compareTo(p2.dob);
}
和
java.util.Collections.sort(al, new MySorter()::compare);
之所以有效,是因为new MySorter()
创建了一个MySorter
类型的对象,然后::compare
将方法引用传递给实例方法compare
,这是合法的[=19] =]
How is it possible to create "new Class:staticMethod"?
有实例NOT无关紧要,编译器会选择className并直接调用静态方法。
图片来源为here。