API规范page for the Object class对于方法 toString()
来说:
"It is recommended that all subclasses override this method."
因此,我希望在 Java 类库的许多类中看到 @Override
注释。我看了看,它既不存在于类'Class中' 也不是类 'String'。
这是我检查的唯一两个,但假设 JCL 中的所有类都是这种情况,为什么它们不使用 @Override
注释?
是出于性能原因吗?
是因为这些类是在引入@Override
之前编写的吗?
我的印象是,自由地使用@Override
是good 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/