【发布时间】:2018-12-27 12:00:49
【问题描述】:
我有以下一段代码,它使用 java 功能接口,可以编译,但不清楚它为什么编译:
public class App {
public static void main(String[] args) throws Exception {
final RecordIterator it = new RecordIterator<MyRecord>();
final UpdateManager updateManager = new UpdateManager();
updateManager.doUpdateForEach(it, DatabaseOperator::updateInfo);
}
}
class UpdateManager {
public void doUpdateForEach(final RecordIterator recordIterator,
final FunctionalStuff<MyRecord> updateAction) throws Exception {
updateAction.execute(new DatabaseOperator(), new MyRecord());
}
}
class RecordIterator<E> {
}
@FunctionalInterface
interface FunctionalStuff<T> {
void execute(final DatabaseOperator database, final T iterator) throws Exception;
}
class DatabaseOperator {
public void updateInfo(final MyRecord r) {
}
}
class MyRecord {
}
所以,我的困惑在于main 方法:
- main方法的最后一行是
updateManager.doUpdateForEach(it, DatabaseOperator::updateInfo); -
UpdateManager#doUpdateForEach方法需要RecordIterator(好的,有道理)和FunctionalStuff -
FunctionalStuff有一个方法(显然),它接收 2 个参数 -
doUpdateForEach的第二个参数是方法引用 (DatabaseOperator::updateInfo) -
DatabaseOperator::updateInfo方法接收单个参数
这是如何编译的? DatabaseOperator::updateInfo 方法引用是如何转换成函数式接口的?我错过了一些明显的东西吗?或者是功能接口的一些极端情况?
【问题讨论】:
标签: java java-8 functional-interface