在许多情况下,JavaFX需要使用扩展现有类的类进行自定义。我尝试了这种方法,例如向NumberAxis类添加一个方法,该方法可以旋转轴的标签。 但是我得到了“NumberAxis被声明为final,无法扩展”的编译错误。我想知道扩展课程的人是怎么做的?他们是否可以访问javafx的源代码,修改它以使某些类不是最终的,并重新编译它? (听起来很棘手!)
答案 0 :(得分:4)
在JavaFX框架中使许多类最终是框架开发人员的有意决定。要了解其完成原因,请参阅Making Color Final proposal。这只是一个例子,还有其他原因。我认为在Swing框架中使用子类化的经验是它导致了JavaFX设计者想要避免的错误和维护问题,所以很多事情都是最终的。
还有其他方法来扩展功能而不是直接子类。您的轮换示例的一些替代方案:
JavaFX的源代码是available build instructions。但是,我不建议破解源代码的个人副本以删除最终构造,除非您还将其作为JavaFX系统的接受补丁提交,以便您可以确保您的应用程序不会在标准JavaFX安装上中断
如果你真的认为给定的一个类可以是子类,那么log a change request。有时JavaFX开发人员过于热心并且做出最终决定,最好不要做到最终。 NumberAxis可能属于该类别。