Discuss / Java / 关于在lambda里调用实例方法

关于在lambda里调用实例方法

Topic source
public class Main {
    public static void main(String[] args) {
        String[] array = new String[] { "Apple", "Orange", "Banana", "Lemon" };
        Arrays.sort(array, String::compareTo);
        System.out.println(String.join(", ", array));
    }
}

这里面,String::compareTo调用的是哪个对象的实例方法呢?或者说,这个this指向的是哪一个对象呢?

大致明白了,这样调用并没有真正创建一个新的String,而只是调用了它的方法

https://www.jianshu.com/p/b8b7fbf7c4a7

前两种方式是将FI的实参,作为lambda方法的实参来使用

而第三种,FI的实参,是作为lambda方法的调用者来使用

但是它又说

对于被调用的方法而言不能有参数

可是String.compareTo(String anotherString)是有参数的,却可以。这又是怎么回事?

你就这么想吧,系统在调用函数式接口当中唯一的抽象方法时,会自动将第一个调用参数作为实例方法的调用者,剩余的调用参数会作为实例方法的实参。

当在调用一个对象的实例方法,而该对象本身是Lambda的一个参数,这种情况下就考虑使用这种指向任意类型的实例方法的方法引用


  • 1

Reply