方法引用,引用一个非静态方法时,应该加一个new关键字吧
Topic sourceString确实不行....但是Main这个类的compareTo这个方法如果不是static的话,引用时就得new Main()::compareTo,如下所示
public class Main {
public int compareTo(String s1, String s2) {
return s1.toLowerCase().compareTo(s2.toLowerCase());
}
public static void main(String[] args) {
String[] array = new String[] { "apple", "Orange", "banana", "Lemon" };
// 请使用忽略大小写排序,并改写为方法引用:
Arrays.sort(array, new Main()::compareTo);
System.out.println(String.join(", ", array));
}
}
而且重新new一个string实例逻辑就不对, 里面的属性value变了,compareTo方法是要用到实例自身的value的,重新new一个,value变了,肯定不对。 至于你说的Main方法要用到static,这个和你说的问题不是一回事吧
如果你要传入比较两个对象,就不应该是CompareTo而应该是静态方法Compare(Object o1, Object o2);
如果你定义的是实例方法Compare(Object o),那么它有隐含参数this。另外如果把你上面那个改称实例方法Compare(Object o),也无法传入Main::Compare,因为this所指向的实例是Main类,而Comparator<String>里的compareTo需要的参数是String类。
- 1
- 2
shadowTy
是否应该改为