我知道有四个方法参考:
Class :: new
Class ::静态方法
instance ::实例方法
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引用的列表进行排序:
我认为正确答案是1和2。但是此练习的解决方案表明所有行(1、2和3)都是正确的。
如何创建“新的Class:staticMethod”?
非常感谢!
A。
答案 0 :(得分:2)
所有三个版本均可使用:
java.util.Collections.sort(al, (p1, p2)->p1.dob.compareTo(p2.dob));
是调用SortTest::diff
的lambda版本
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
答案 1 :(得分:1)