我学习了 Java 8 的新特性。
我在玩不同的例子,但我发现了一个奇怪的行为:
public static void main(String[] args) {
method(Test::new);
}
static class Test{
}
private static void method(Supplier<Test> testSupplier){
Test test = testSupplier.get();
}
此代码编译成功,但我不知道它是如何工作的。
为什么 Test::new
可以作为供应商接受?
供应商界面看起来很简单:
@FunctionalInterface
public interface Supplier<T> {
T get();
}
最佳答案
Supplier
接口(interface)有一个(功能)方法:
- 不带任何参数;
- 返回一个对象。
因此,任何符合这两点的方法,都符合Supplier
的功能契约(因为方法将具有相同的签名)。
这里,所讨论的方法是方法引用。它不接受任何参数并返回 Test
的新实例。您可以将其重写为:
method(() -> new Test());
Test::new
在这个 lambda 表达式的语法糖中。
关于java - Java 8 可以动态实现接口(interface)以供方法引用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32703977/