有人可以揭开我用匿名类/lambda 做什么的神秘面纱吗?



我正在构建一个JavaFX应用程序,我发现了的乐趣

FXMLloader.setControllerFactory(setControllerFactory​(Callback<Class<?>,Object> controllerFactory)

为了让我的代码正常工作,我搜索了一个例子:

loader.setControllerFactory(c -> {
return new MyController(dialog, seed);
});

它非常简单和干净,现在我可以在我的FXML文件中定义预期的控制器,但我可以构造更复杂的控制器/种子,这在注入过程中不会发生。对不起,我真的不明白那里发生了什么。我确信这是一个lambda或一个匿名类。有人能帮我解开这个谜吗?我对lambdas不在行。它们看起来总是很有吸引力,对局部变量的作用域访问总是很方便,但它们让我很困惑

特别是。。。需要向setControllerFactory传递具有泛型P->Class<?>R->ObjectCallback<P,R>的实例X,以便可以执行返回ObjectX.call(Class<?>)

我在这里定义Class<?>是什么/在哪里?如果没有任何lambdas/匿名类,我该如何编码?

它(有点(分解如下

c ->       // c is the Class<?> parameter, which is not used
{    // Scope of Callback<Class<?>, Object>> lambda method body
return new MyController(dialog, seed);    // The <Object> being returned
});

在某个时刻,lambda被Class<?>调用,它会忽略它并返回一个新的控制器。

等效的匿名类可以通过实现Callback<类<gt;,对象>作为

Callback<Class<?>, Object> f = new Callback<>() {
public Object call(Class<?> ignored) {
return new MyController(dialog, seed);
}
};

最新更新