我可以做些什么来模拟“on created”事件吗?
我有一个其他人可以扩展的基类,目前我有一个init()
来初始化实例,但只有在构造函数堆完成后才能调用它。
如果我在基类的构造函数中调用init()
,那么我可能会错误地初始化,因为子类的构造函数还没有完成执行。子类可以初始化某些受保护字段的值,这会对init()
初始化实例的方式产生影响。
我目前的做法是制作init()
protected final
,并要求子类必须在构造函数的末尾调用它。这种方法有效,但仅在子类确实遵循指令时才提供。
我以为我会提供一些额外的信息。这是JavaFX项目/自定义API的一部分。所以我尝试使用Platform.runLater(() -> init())
,这是一个重大错误。 Platform.runLater()
只会在整个执行堆栈完成后运行,这会导致在这种情况下使用未初始化的实例:
Foo instance = new Foo();
instance.doSomething();
答案 0 :(得分:0)
没有简单的方法可以在子类构造函数的末尾强制执行方法调用。这可以通过annotation processor
来实现,它允许您在预编译时修改源代码。但它会很复杂。我认为不是使用子类化,而是使用工厂模式来更好地实现目标。
您可以定义一些设置器,让用户初始化您的字段,然后在工厂方法结束时调用init
。