类名::实例方法这种方法引用形式,实际上是一种语法糖,它可以理解为对实例::实例方法的一种特殊情况。
类名::实例方法
实例::实例方法
使用类名::实例方法方法引用,实例:
public class Main { String instanceMethod(){ return "123"; } static String call(I i){ return i.func(new Main()); } @Test void test() { System.out.println(Main.call(Main::instanceMethod)); } } interface I{ String func(Main a); }
这种方法引用需要一个接收者参数,因此I接口的func方法需要接收一个Main类型的参数。
I
func
Main
类似通过反射的形式调用方法:
public class Main { String instanceMethod(){ return "123"; } static String ref(Class<?> c,String name) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException { return (String) c.getDeclaredMethod(name).invoke(new Main()); } @Test void test() throws NoSuchMethodException, InvocationTargetException, IllegalAccessException { System.out.println(Main.ref(Main.class,"instanceMethod")); } }
使用实例::实例方法方法引用,则没有隐含参数:
public class Main { String instanceMethod(){ return "123"; } static String call(I i){ return i.func(); } @Test void test() { Main main = new Main(); System.out.println(Main.call(main::instanceMethod)); } } interface I{ String func(); }
这种方法引用不需要接收者参数,因为实例本身已经确定了。
Sign in to make a reply
祈祷明天对你也是美好的
类名::实例方法
这种方法引用形式,实际上是一种语法糖,它可以理解为对实例::实例方法
的一种特殊情况。使用
类名::实例方法
方法引用,实例:这种方法引用需要一个接收者参数,因此
I
接口的func
方法需要接收一个Main
类型的参数。类似通过反射的形式调用方法:
使用
实例::实例方法
方法引用,则没有隐含参数:这种方法引用不需要接收者参数,因为实例本身已经确定了。