Не получаю ссылку на объект из родительского класса
Всем, добрый день.
Такая проблема, у меня имеется вот такая структура
public abstract class MainController implements Initializable {
protected Connector connector;
@Override
public void initialize(URL location, ResourceBundle resources) {
connector = new Connector();
}
}
public class TabPaneController<T> extends MainController {
protected ObservableList<T> observableList;
@Override
public void initialize(URL location, ResourceBundle resources) {
super.initialize(location,resources);
observableList = FXCollections.observableArrayList();
}
}
public class FirstTabController extends TabPaneController<Instrument> {
@Override
public void initialize(URL location, ResourceBundle resources) {
//super.initialize(location, resources); // Если я раскомментирую эту строку то все норм
System.out.print(connector == null);
}
}
Проблема собственно заключается в том, что в FirstTabController я не вижу проинициилизированный объект Connector. Но, если я расскоментирую строку super.initialize(location, resources); то у меня connector создастся дважды. Не могу понять почему.
Также вопрос, правильно ли я понимаю, что в моей структуре
MainController -> TabPaneController -> FirstTabController, сначала создается FirstTabController,а MainController в последнюю очередь?
Такой вывод я сделал на основании прохода дебагером по точкам остановы.
Ответы (1 шт):
Сначала вызывается конструкторы по цепочке:
MainController -> TabPaneController -> FirstTabController
Далее инициализируются поля обозначенные @FXML потом вызывается initialize()
То есть в ходе вызова конструктора создастся поле Connector - со значением null, далее в ходе initialize() (если раскомментировать строчку super.initialize()) будет заново инициализировано поле Connector
Я бы предложил зафигачить конструктор в MainController типа:
public abstract class MainController implements Initializable {
protected Connector connector;
protected MainController() {
this.connector = new Connector();
}
@Override
public void initialize(URL location, ResourceBundle resources) {
}
}
Что позволит инициализировать Connector только 1 раз.