【问题标题】:Java/JavaFX How to deal with unknown types?Java/JavaFX 如何处理未知类型?
【发布时间】: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();
}

我的问题是当我设置控制器变量时我不知道它会是什么控制器。我尝试使用泛型,但我无法访问对象的方法。如果有人可以帮助我了解解决此问题的最佳方法,我将不胜感激。

【问题讨论】:

  • 如果你不知道类型,你为什么期望它有setUsernamesetPrivilege 方法?这些必须是特定类型的一部分。
  • 如果你所有的控制器都有setUsername和setPrivilege方法,用这些方法定义一个接口,让所有控制器实现这个接口。因此,您可以将控制器强制转换为该接口并使用方法。
  • 我有一个名为 ParentController 的父类,它具有这些方法。考虑到方法总是有相同的代码,是否值得做一个接口?
  • 如果您向某人发表评论,请添加@,后跟他的名字,例如@c0der
  • 如果您的所有控制器都扩展ParentController,那么您只需要知道这些。将您的 controller 引用声明为 ParentController 而不是 SomeController

标签: java javafx


【解决方案1】:

为包含设置方法的控制器创建一个父类或接口,而不是在所有控制器中都有它们。然后就可以使用 ParentController 类型了。

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();

 ParentController controller = loader.getController();
 controller.setUsername(username);
 controller.setPrivilege(privilege);

 stage.setTitle("Yuconz System");
 stage.setScene(new Scene(root));
 stage.setMaximized(true);
 stage.show();
}

【讨论】:

    猜你喜欢
    • 2020-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-09
    • 1970-01-01
    相关资源
    最近更新 更多