java - 为什么 JCL 中的类不在其 `@Override` 方法上显式使用 `toString()`?

标签 java

API规范page for the Object class对于方法 toString() 来说:

"It is recommended that all subclasses override this method."

因此,我希望在 Java 类库的许多类中看到 @Override 注释。我看了看,它既不存在于类'Class中' 也不是类 'String'。

这是我检查的唯一两个,但假设 JCL 中的所有类都是这种情况,为什么它们不使用 @Override 注释?

是出于性能原因吗?
是因为这些类是在引入@Override之前编写的吗?

我的印象是,自由地使用@Overridegood programming practice .

最佳答案

如果您了解为什么使用@Override,就可以理解这一点。问题是它只为子类维护者提供好处。

主要用法如下:库A有一个类SecurityManager,它有方法allowed。 Bob 在他的项目中使用了 A,他扩展了 SecurityManager,并在代码中覆盖了 allowed。然而,allowed 仅由 SecurityManager 的内部逻辑使用,因此 Bob 从未在他的代码中调用它,但他依赖该库将使用他的实现而不是 basic。然后,该库的维护者创建了一个新的主要版本,并进行了一些重大更改 - 并将该方法重命名为 isAllowed。 Bob 下载了新版本,编译器对他说“@Override 不会覆盖任何内容 - 重新检查您的代码”,Bob 看到该方法的名称已更改,并修复了该问题。

但是 java 是向后兼容的,因此期望 toString 在某个时间点被删除或重命名是没有意义的。这就是为什么为 Object 的方法添加 @Override 是没有意义的。

关于java - 为什么 JCL 中的类不在其 `@Override` 方法上显式使用 `toString()`?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34570342/

相关文章:

java - future 与可完成的 future ?对于这个用例 Completablefuture 会有什么不同吗?

java - 如何使用 Java 从 XSD 生成 XML 数据?

java - Java 中可撤消的文本区域

java - 无法从 w3c 加载 java 类

java - MapperBuilder 的 NoClassDefFoundError

java - 轴对齐边界框和三角形的分离轴测试产生不正确的结果 (3D)

java - 无法增加 Honeycomb 及以上版本音乐流的音量

java - COM 接口(interface) iStream 在哪个 DLL 中定义?

java - 仅在 onCreate 值分配时发生

java - 如何从字符串中删除 '\' 字符