java - 方法参考:新的位置
问题描述
我知道有四种方法参考:
类::新
类::静态方法
instance:: 实例方法
类 :: 实例方法
在这个练习中,我发现了另一种形式的方法引用,我想问你这是怎么可能的。
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)都是正确的。
如何创建“新类:静态方法”?
非常感谢!
一个。
解决方案
所有三个版本都可以工作:
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
,这是合法的。
推荐阅读
- sql - 展平雪花中变体 json 列中的多个名称数组
- rdf - Blazegraph 数据加载器
- java - 为什么我的堆栈只添加一个元素然后删除它?
- html - 溢出滚动后保持绝对位置
- c# - 如何在接口中模拟接口的只读属性已被模拟
- excel - VBA重复搜索分隔列并将值打印到新行
- laravel - Laravel Chart: xAxes doesn't start from zero
- javascript - Javascript and Mysql save api data
- c++ - clang-tidy ignoring preprocessor directives
- bash - problems with bash script array aways giving same error