这个静态方法是如何代替实现接口的 class 传递的?
How is this static method being passed in lieu of a class that implements an interface?
我不确定这里发生了什么。这是一个界面:
public interface AppInit {
void create(Environment var1);
}
这里有一些class的方法:
public static StandaloneModule create(AppInit appInit) {
return new StandaloneModule(appInit);
}
下面是该方法的调用方式:
StandaloneModule.create(Main::configure)
但是那个参数方法的签名是:
static void configure(final Environment environment) {
...
为什么编译?
你的接口是一个函数式接口(即一个抽象方法)。特别是它是 Environment
类型的 Consumer
。消费者接受一个论点,returns 什么也没有。所以它只是 consumes
参数,通常对其应用某种类型。这是一个更常见的例子。
interface Consumer {
void apply(String arg);
}
public class ConsumerDemo {
public static void main(String [] args) {
SomeMethod(System.out::println);
}
public static void SomeMethod(Consumer con) {
con.apply("Hello, World!");
}
}
打印
Hello, World!
接口不需要显式实现。编译器通过找到合适的接口并创建通常是匿名的 class.
来处理这个问题
以上是使用方法引用调用的。它也可以称为 lambda。
a -> System.out.println(a)
这里 con.apply("Hello, World!")
会将字符串传递给 a
并打印出来。
我不确定这里发生了什么。这是一个界面:
public interface AppInit {
void create(Environment var1);
}
这里有一些class的方法:
public static StandaloneModule create(AppInit appInit) {
return new StandaloneModule(appInit);
}
下面是该方法的调用方式:
StandaloneModule.create(Main::configure)
但是那个参数方法的签名是:
static void configure(final Environment environment) {
...
为什么编译?
你的接口是一个函数式接口(即一个抽象方法)。特别是它是 Environment
类型的 Consumer
。消费者接受一个论点,returns 什么也没有。所以它只是 consumes
参数,通常对其应用某种类型。这是一个更常见的例子。
interface Consumer {
void apply(String arg);
}
public class ConsumerDemo {
public static void main(String [] args) {
SomeMethod(System.out::println);
}
public static void SomeMethod(Consumer con) {
con.apply("Hello, World!");
}
}
打印
Hello, World!
接口不需要显式实现。编译器通过找到合适的接口并创建通常是匿名的 class.
来处理这个问题以上是使用方法引用调用的。它也可以称为 lambda。
a -> System.out.println(a)
这里 con.apply("Hello, World!")
会将字符串传递给 a
并打印出来。