Java库中缺少@Override

Java库中缺少@Override,java,inheritance,annotations,jvm,Java,Inheritance,Annotations,Jvm,这被认为是一个很好的实践 在中被重写的方法上使用@Override注释 子类 但为什么Java库附带的类不适用相同的规则呢。例如字符串类。它覆盖对象类的方法,但不在这些方法上使用@Override注释 这样做是为了保持与Java早期版本(如1.4等)的向后兼容性吗 感谢这并不是一个装饰性的注释,它在生成文档、通过Java IDE给出提示以及在重写方法时显式声明时非常有用 从运行时/标准库实现者的角度来看,仅仅为了添加一些装饰性的内容而修改所有现有类是不值得的 此外,关于注释的向后兼容性,考虑到注

这被认为是一个很好的实践

在中被重写的方法上使用@Override注释 子类

但为什么Java库附带的类不适用相同的规则呢。例如字符串类。它覆盖对象类的方法,但不在这些方法上使用@Override注释

这样做是为了保持与Java早期版本(如1.4等)的向后兼容性吗


感谢

这并不是一个装饰性的注释,它在生成文档、通过Java IDE给出提示以及在重写方法时显式声明时非常有用

从运行时/标准库实现者的角度来看,仅仅为了添加一些装饰性的内容而修改所有现有类是不值得的

此外,关于注释的向后兼容性,考虑到注释是
.class
文件中存在的可选和扩展属性(当它们的保留策略是
class
运行时
且可用于
方法
作为
运行时(in)使用时)VisibleAnnotations
和对于
参数
作为
运行时(In)VisibleParameterAnnotations
),JVM的早期版本将在第一次需要该类时执行的
文件解析期间忽略该属性


但实际上,,1.4 JVM类解析器甚至不会到达那些注释
.class
属性位于结构内部的位置,因为当JVM注意到
.class
版本大于支持的版本时,解析将突然结束。

@override注释用于提供一些额外信息,主要是在生成文档时,也用于通知开发人员代码打算重写超类中的方法

oracle文档中提到了这一点

@Override@Override注释通知编译器元素 用于重写超类中声明的元素。最重要的 方法将在接口和继承中讨论

//将方法标记为超类方法//已 Overrided@Override int OverridedEndMethod(){}

而在重写时不需要使用此注释 方法,它有助于防止错误。如果使用@Override标记的方法 无法正确重写其超类之一中的方法 编译器生成一个错误


在一个API中,它不会为用户(该API的用户)提供太多。然而,当您实现一个方法,并且您“打算”重写一个超类的方法时,很容易错过应该匹配的方法签名

在这种情况下,将在编译时进行救援,当重写未发生时,它将失败或发出警告。此外,许多IDE都能识别并提供足够的支持,以便在编译之前标记和纠正这些情况

因此,本质上声明了您的意图,即此方法覆盖某些内容。只要API有效,它的用户就不会在意您的意图是什么

实际上,可能真正的原因是:注释的。这意味着在编译到类文件时将丢弃该标志

@Target(value=METHOD)
 @Retention(value=SOURCE)
public @interface Override

先生,我的这个问题与您何时使用Java的覆盖注释以及为什么使用这个问题不同?因为我需要问为什么Java中不使用覆盖Libraries@Ankit首先是库,然后是注释。他们可能没有一个毕业生或实习生来检查整个库代码,只是为了添加覆盖注释:P@Ankit你可能是对的——看起来完全不同——放弃索赔。谢谢你的回答先生谢谢你的回答先生