ped*_*o91 11 java java-8 functional-interface
我有以下代码,它使用编译的java Functional Interfaces,但不清楚它为什么要编译:
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 {
}
Run Code Online (Sandbox Code Playgroud)
所以,我的困惑在于main方法:
updateManager.doUpdateForEach(it, DatabaseOperator::updateInfo);UpdateManager#doUpdateForEach方法需要一个RecordIterator(确定,有意义),和FunctionalStuffFunctionalStuff 有一个方法(显然),接收2个参数doUpdateForEach是方法引用(DatabaseOperator::updateInfo)DatabaseOperator::updateInfo方法接收单个参数这是如何编译的?DatabaseOperator::updateInfo方法参考如何转换为功能界面?我错过了一些明显的东西吗 或者是功能接口的一些角落?
DatabaseOperator::updateInfo方法参考如何转换为功能界面?
方法引用的有效lambda表示形式为:
updateManager.doUpdateForEach(it, (databaseOperator, r) -> databaseOperator.updateInfo(r));
Run Code Online (Sandbox Code Playgroud)
这是匿名类的进一步表示:
new FunctionalStuff<MyRecord>() {
@Override
public void execute(DatabaseOperator databaseOperator, MyRecord r) throws Exception {
databaseOperator.updateInfo(r);
}
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
209 次 |
| 最近记录: |