java创建匿名控制器的实例并使用其方法
早上好亲爱的董事会
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();
但现在我有一个例子,我需要做控制器的实例,并使用它们的方法,这在编码时是未知的。它们是通过运行时知道的,这取决于用户单击了哪个按钮
所以我需要的是上述两种技术的结合。现在,我做了以下,但它不会工作
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和你的控制器混合在一起,看看这个
但是请记住,反射可能会降低应用程序的速度,重构可能很难做到。如果您解释了您的用例,那么可以使用类似于OOP的继承的其他方法