【发布时间】:2019-03-08 22:44:11
【问题描述】:
所以我对 Java 和 JavaFX 还很陌生,遇到了一个问题,我不确定解决它的最佳方法。
public void goToDestination(String destination, String username, Privilege privilege) throws IOException {
FXMLLoader loader = new FXMLLoader(getClass().getResource("../../resources/fxml/" + destination + ".fxml"));
Parent root = loader.load();
SomeController controller = loader.getController();
controller.setUsername(username);
controller.setPrivilege(privilege);
stage.setTitle("Yuconz System");
stage.setScene(new Scene(root));
stage.setMaximized(true);
stage.show();
}
我的问题是当我设置控制器变量时我不知道它会是什么控制器。我尝试使用泛型,但我无法访问对象的方法。如果有人可以帮助我了解解决此问题的最佳方法,我将不胜感激。
【问题讨论】:
-
如果你不知道类型,你为什么期望它有
setUsername和setPrivilege方法?这些必须是特定类型的一部分。 -
如果你所有的控制器都有setUsername和setPrivilege方法,用这些方法定义一个接口,让所有控制器实现这个接口。因此,您可以将控制器强制转换为该接口并使用方法。
-
我有一个名为 ParentController 的父类,它具有这些方法。考虑到方法总是有相同的代码,是否值得做一个接口?
-
如果您向某人发表评论,请添加@,后跟他的名字,例如@c0der
-
如果您的所有控制器都扩展
ParentController,那么您只需要知道这些。将您的controller引用声明为ParentController而不是SomeController。