Java如何解决Swift旨在解决的类初始化问题?

下雨

根据我在线阅读的报价

Swift的规则之一是,必须在初始化超类之前初始化一个类的所有属性。这避免了如果超级初始化程序调用被覆盖而导致状态不一致的方法时可能出现的问题。

如此看来,该语句后面似乎有一些编程范例?由于我正在使用Java,并且Java中没有此类限制,因此我想知道Java如何解决此问题。

清扫器

在Java中,超级构造函数在子类构造函数之前运行-与Swift中发生的情况完全相反。没有什么可以阻止您在超类构造函数中调用重写的方法,但这并不意味着您应该这样做。请参阅以下相关问题:

为什么在类构造函数上调用的方法应该是最终的?

基本上,当您调用重写的方法时,有可能您正在访问未初始化的字段,或者根本不执行超类通常期望的操作。

虽然有合法用法:

在Java中,是否有合理的理由从类构造函数中调用非最终方法?

在Swift中,超类初始化器可以毫无问题地调用重写的方法(只要所有存储的属性都已初始化),因为到那时,整个类层次结构的属性已被完全初始化。

有诸如SonarQube之类的工具可以解决此类问题,但是Java编译器无法做到。如果您问为什么,那么,这就是整个“控制与安全”之间的折衷-您是否希望对代码进行更细粒度的控制,或者更安全?

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何解决Singleton EJB初始化失败的问题

React Native如何解决(无法初始化org.codehaus.groovy.reflection.ReflectionCache类)问题

如何解决“图形设备初始化失败:d3d,sw”的问题

我如何解决这个问题:在初始化之前无法访问“calculationEntry”?

如何解决错误:无法初始化主类选择。ClustererExecution

如何解决:从不兼容的指针类型初始化

如何解决变量初始化C ++的警告

非法的char初始化程序-如何解决?

如何解决未初始化的常量搜索::错误

如何解决“LateInitializationError:字段‘userMap’尚未初始化。”

如何解决“无法使用类型为(MKMapRect)的参数列表调用类型为'MKMapRect'的初始化程序”的问题,在Swift 5.0中出现错误

使用JavaFx运行Java Jar文件时,如何解决“图形设备初始化失败:d3d,sw”的问题

在Java中,为什么不能在父类中声明最终成员(不进行初始化),并在子类中设置其值?我该如何解决?

在WSL上运行时,如何解决“针对es2,sw的图形设备初始化失败”的问题?

如何解决此问题:上下文初始化期间遇到异常-取消刷新尝试?

如何解决Java 12上的JAXB类路径问题

类'ViewController'没有初始化程序-相似的问题无法解决问题

Java序列化如何解决循环引用问题?

如何解决类缺少ActivatableAttribute的问题

如何解决“未初始化值的使用”以及如何查找泄漏位置?

如何解决“无法延迟初始化角色集合”的Hibernate异常

初始化Selenium WebDriver时如何解决python-Selenium错误“连接被拒绝”?

如何解决“正确初始化log4j系统”错误?

如何解决非线程安全的懒惰初始化CXF客户的工厂?

如何解决通过interface {}传递的对象是否没有初始化的字段

如何解决无法初始化设备hci0。错误?

如何解决Apache POI“工作簿”可能尚未初始化

如何解决Firebase API初始化失败(Android + Firebase)

如何解决“条件中的变量声明必须具有初始化程序”