繁体   English   中英

创建匿名Controller实例并使用其方法

Create Instance of anonymous Controller and use its methods

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

早上好亲爱的董事会

Java中有一种方法可以使匿名类的实例:

Class<?> c = Class.forName("class name");
Method  method = c.getDeclaredMethod ("method name", parameterTypes)
method.invoke (objectToInvokeOn, params)

如果我希望制作新的JavaFX控制器实例,则可以这样做:

FXMLLoader loader = new FXMLLoader(getClass().getResource(
           "MyClass.fxml"));
MyClassCtrl ctrl = loader.getController();
Parent root = (Parent) loader.load();
ctrl.methodNameOfMyClassCtrl();

但是,现在有一个示例,我需要执行Controller的实例并使用其方法,这些在编码时是未知的。 它们会在运行时被知道,取决于用户单击了哪个Button。

因此,我需要的是上述两种技术的组合。 现在,我进行了以下追踪,但无法正常工作。

String methodName = "myMethod";
String className = "MyController";

FXMLLoader loader = new FXMLLoader(getClass().getResource( className + ".fxml" ));
Class c = Class.forName(className);
loader.setController(c);
Parent root = (Parent) loader.load();
Method m = c.getDeclaredMethod(methodName, null);
m.invoke(null, null);

我怀疑,我是第一个尝试这样的事情-你们是我最后的机会。

谢谢,最好的问候埃尼斯

1 个回复

如果您确实想将反射API与控制器混合使用,请参阅此

String methodName = "myMethod";
String className = "MyController";

FXMLLoader loader = new FXMLLoader(getClass().getResource( className + ".fxml" ));
Class c = Class.forName("mypackage." + className);
Object obj = c.newInstance();
loader.setController(obj);
Parent root = (Parent) loader.load();
Method m = c.getDeclaredMethod(methodName);
m.invoke(obj);

但是请记住,反射可能会减慢您的应用速度,并且可能难以进行重构。 如果您解释用例,那么可以使用OOP的其他方法,例如继承。

3 使用Dapper创建匿名对象的实例

我正在学习Dapper,并且无法使用它创建匿名类型的实例。 首先,有一些上下文:我们有一个返回IEnumerable&lt;T&gt; 。 请注意, T可以是匿名的。 此代码适用于注册类(如超级按钮)。 但是,我希望它也处理匿名类型,并且编译器引发的问题是: 我知道问题在于 ...

4 Javafx-FXMLLoader的load方法无法创建Controller类的实例

我已经检查了所有与我的问题类似的解决方案,但是我的问题仍然保持不变。 我的Painter.fxml文件,PainterController.java文件和包含main方法的Painter.java文件都在同一文件夹中,但是仍然给我运行时错误。 主要问题在于,包含FXMLLoader的load ...

2019-03-05 17:16:11 0 88   java
8 创建接口的匿名实例

我是vb.net的新手,并且具有接受带类型的接口的函数,并且我想创建该接口的匿名实例作为方法参数。 接口 我不确定我是否正确地描述了我的问题,所以这是我想要的Java语言: 接口 方法调用 ...

10 实例变量与在Controller中调用的方法

我的控制器中有以下代码。 如您所见,所有实例变量(@ current_orders,@ pending_orders等)都可以从@customer获得。 编写此代码的最佳方法是什么? 我是否需要在控制器中创建这些实例变量,或者我只在视图中通过@customer变量使用它们。 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM