我正在构建一个JavaFX应用程序,我发现了的乐趣
FXMLloader.setControllerFactory(setControllerFactory(Callback<Class<?>,Object> controllerFactory)
为了让我的代码正常工作,我搜索了一个例子:
loader.setControllerFactory(c -> {
return new MyController(dialog, seed);
});
它非常简单和干净,现在我可以在我的FXML文件中定义预期的控制器,但我可以构造更复杂的控制器/种子,这在注入过程中不会发生。对不起,我真的不明白那里发生了什么。我确信这是一个lambda或一个匿名类。有人能帮我解开这个谜吗?我对lambdas不在行。它们看起来总是很有吸引力,对局部变量的作用域访问总是很方便,但它们让我很困惑
特别是。。。需要向setControllerFactory
传递具有泛型P->Class<?>
和R->Object
的Callback<P,R>
的实例X,以便可以执行返回Object
的X.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);
}
};