2 回答
TA贡献1982条经验 获得超2个赞
一些背景
Arrays.sort
需要一个Comparator
,当传递一个方法引用时,它必须是一个接受两个适当类型实例的方法。
有两种方法可以创建这种方法:
在任何接受两个适当类型参数的类中创建一个静态方法。这基本上就是您所做的。这样的方法不需要在特定的类中声明,您还可以使用其他一些提供此类帮助器方法的类。
您的编译器将确保生成的Comparator
实例使用要比较的2个实例调用引用的方法。
在特定类中为该类型创建一个实例方法,该方法接受适当类型的一个参数。
您的编译器将确保所生成Comparator
的实例以第2个实例为参数调用第一个实例上的引用方法。
您的具体情况
由于您的方法有两个参数,因此它必须是静态的,否则它将需要第三个实例来运行。要么声明它的静态或删除一个参数和执行之间的比较本和参数。
TA贡献1783条经验 获得超4个赞
您正在使用方法引用,并且由于已编写它,因为Person::compareByFirstName它是在引用静态方法。如果要引用一个实例方法,则需要先创建该对象的一个实例,然后再将该实例与实例一起引用,如下所示:
Person p = new Person("");
p::compareByFirstName
但是,这不是您要执行的操作,因为compare方法不是特定于实例的。
您可以通过将对象实例与另一个对象进行比较,更改比较方法以使其特定于实例
public int compareByFirstName(Person p2) {
return this.getFirstName().compareTo(p2.getFirstName());
}
在这种情况下,您可以使用方法参考,Person::compareByFirstName因为比较变得无用。
添加回答
举报