为什么JCL中的类没有明确地在`toString()`方法上使用`@Override`?

时间:2016-01-02 20:22:17

标签: java

方法toString()的API规范page for the Object class声明:

 "建议所有子类都覆盖此方法。"

因此,我希望在Java类库中的许多类中看到@Override注释。我看了,它并没有出现在课堂上Class'也不是班级'字符串'。

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

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

我的印象是,@Override使用LinkedList<LinkedList<Integer>>good programming practice

1 个答案:

答案 0 :(得分:2)

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

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

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