我的问题是非常基本的,为什么我们人们使用@Override
注释,此注释的重要性是什么?
在旧的JDK中,为什么它不显示为警告,但是在最新的JDK中,则需要“为什么..”?
假设您有:
public class Foo
{
public void bar(String x, String y) {}
}
public class Foo2 extends Foo
{
public void bar(String x, Object y) {}
}
您 确实
打算Foo2.bar
覆盖Foo.bar
,但是由于签名中的错误,它不是这样做的。如果使用@Override
,则可以让编译器检测故障。它 还会
向任何 阅读 代码的人表明这将覆盖现有方法或实现接口-为他们提供有关当前行为以及重命名该方法可能产生的影响的建议。
另外,如果某个方法在 未 指定的 情况下
覆盖了某个方法,则编译器可能会向您发出警告@Override
,这意味着您可以检测是否有人在不知不觉的情况下将具有相同签名的方法添加到了超类中-您可能
不想 覆盖新方法,因为您现有的方法可能具有不同的语义。虽然@Override
没有提供一种“超越”方法的方法,但至少强调了潜在的问题。
问题内容: 使用Java 注释的最佳实践是什么?为什么? 用注解标记每个覆盖的方法似乎是过大的。是否存在某些编程情况要求使用和其他不应该使用的情况? 问题答案: 每次你重写一种方法都有两个好处时使用它。这样做是为了使你能够利用编译器检查的优势,以确保你认为自己确实覆盖了某个方法。这样,如果你犯了拼写错误的方法名称或不正确匹配参数的常见错误,将会警告你方法实际上并没有像你认为的那样覆盖。其次,它使你
从Dagger2文档中,我注意到您可以有一个注释类。将类标记为的目的是什么,因为我在代码中尝试过这样做,但没有生成singleton对象。我不清楚用这个注释标记我的类有什么用。 从文档中,请关注以下声明: injectable类上的@Singleton注释也可用作文档。它提醒潜在的维护者,该类可能由多个线程共享。*
问题内容: 当我实现接口方法时,Eclipse将添加@Override批注。Eclipse似乎对此没有任何问题。而且,来自Cruise Control的自动化构建过程似乎对此没有问题。但是,当我从命令行构建并运行Javac的ant时,出现以下错误: Eclipse在Java 1.6下运行。Cruise Control正在运行Java 1.5。无论我使用哪个Java版本,我的蚂蚁构建都会失败。 问题
是否有任何方法可以重用UserController方法,只需添加不同的安全性预授权,而无需为管理员重写这些方法?
问题内容: 除了让编译器检查超类是否具有该方法之外,是否有任何其他理由来注释方法? 问题答案: 如您所描述的,@ Override创建一个编译时检查,以确保方法被覆盖。这对于确保尝试覆盖时不会出现愚蠢的签名问题非常有用。 例如,我看到以下错误: 此类按编写方式进行编译,但是将@Override标记添加到equals方法将导致编译错误,因为它不会覆盖Object上的equals方法。这是一个简单的错
问题内容: 是否确实有一些功能,或者它只是有点对此有何评论? 问题答案: 从有关注解的Java教程中: — 注释告知编译器该元素旨在覆盖超类中声明的元素(覆盖方法将在名为“接口与继承”的课程中进行讨论)。 虽然在重写方法时不需要使用此批注,但它有助于防止错误。如果标有的方法无法正确覆盖其父类之一中的方法,则编译器将生成错误。 让我们看一下Java语言规范9.6.1.4 Override中 给出的示