繁体   English   中英

超级初始化后,JavaFx调用super方法

[英]JavaFx call super method after super initialization

我有一个实现Initializable的类。

public abstract class ExampleClass implements Initializable {

    public void ExampleClass() {
        // Load FXML
    }

    @Override
    public void initialize(URL location, ResourceBundle resources) {
        // Initialize stuff
    }

    public void afterInitialize() {
        // Do things that are reliant upon the FXML being loaded
    }
}

然后我扩展这个抽象类:

public class ExampleSubclass extends ExampleClass {

    public ExampleSubclass() {
        super(/* real code has params */);
        this.afterInitialize(); // Problem here
    }
}

但是,当我调用afterInitialize()时,它的行为就像抽象类中的FXML尚未加载一样。 这让我感到困惑,因为我先调用了super()构造函数,所以我相信FXML应该已经被加载了。

我究竟做错了什么?

提前致谢。

根据这个答案initialize方法的调用不会在构造函数中发生,而是在它之后。 所以当你在子类的构造函数中调用afterInitialize时,它实际上是在initialize之前调用的!

简而言之:首先调用构造函数,然后填充任何@FXML注释字段,然后调用initialize()...

因此,当调用initialize时,所有FXML元素都已加载,并且正如其他人建议的那样,您可以在initialize方法中调用afterInitialize但如果您不想这样做,则可以使用@PostConstruct注释:

public abstract class ExampleClass implements Initializable {

    public void ExampleClass() {
        // Load FXML
    }

    @Override
    public void initialize(URL location, ResourceBundle resources) {
        // Initialize stuff
    }

    @PostConstruct
    public void afterInitialize() {
        // Do things that are reliant upon the FXML being loaded
    }
}


public class ExampleSubclass extends ExampleClass {

    public ExampleSubclass() {
        super(/* real code has params */);
    }

    @PostConstruct
    @Override
    public void afterInitialize() {
         super.afterInitialize();
        // other things
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM