Вызвать метод неизвестного класса - PullRequest
0 голосов
/ 05 января 2020

У меня мало контроллеров, и у каждого есть метод init (). Вопрос в том, как я могу вызвать метод для каждого из загруженных этапов / контроллеров? Приведенный ниже код работает нормально, но я не хочу писать сценарий для каждого возможного класса контроллера.

Вкратце, я хочу, чтобы:

FXMLLoader loader = new FXMLLoader(Main.class.getClassLoader().getResource("somefxmlfile.fxml"));
if (loader.getController() instanceof LoginController) {
    ((LoginController) loader.getController()).init();
}

было заменено чем-то вроде этого:

FXMLLoader loader = new FXMLLoader(Main.class.getClassLoader().getResource("somefxmlfile.fxml"));
if (loader.getController() instanceof Class<T extends Controller>) {
     ((Class<T extends Controller>) loader.getController()).init();
}

Я некоторое время бездельничаю и не могу написать правильный код.

1 Ответ

2 голосов
/ 05 января 2020

Мне приходят на ум две идеи:

  • Если кто-то имеет контроль над классом Controller, то можно дать ему public abstract void init() - метод и реализовать его во всех классах. расширение Controller
  • В качестве альтернативы можно сделать это Spring-way, аннотируя метод с некоторой пользовательской аннотацией (например, @PostConstruct или @InitMethod), и сканировать метод в контроллере, аннотированном этой аннотацией. и выполнить его после строительства.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...