是否有一种方法可以使用Java'指定要重写的接口/类;s覆盖注释?

是否有一种方法可以使用Java'指定要重写的接口/类;s覆盖注释?,java,Java,有些类有许多从中继承的接口 我想在我的重写方法中明确我的方法重写了什么接口或类,这样当我从现在开始一个月后回顾我的代码时,我就不必对每个被实现的接口和被扩展的类进行线性搜索,以找到该方法被重写的接口或类 情况: class Foo extends Bar implements Foo1, Foo2, Bar1, Bar2 { public Foo(){} @Override void foo1() {} @Override void foo2() {}

有些类有许多从中继承的接口

我想在我的重写方法中明确我的方法重写了什么接口或类,这样当我从现在开始一个月后回顾我的代码时,我就不必对每个被实现的接口和被扩展的类进行线性搜索,以找到该方法被重写的接口或类

情况:

class Foo extends Bar implements Foo1, Foo2, Bar1, Bar2
{
    public Foo(){}

    @Override
    void foo1() {}

    @Override
    void foo2() {}

    @Override
    void bar1() {}

    @Override
    void bar2() {}
}
我想做一些类似的事情:

class Foo extends Bar implements Foo1, Foo2, Bar1, Bar2
{
    public Foo(){}

    @Overrides(source="Foo2")
    void foo1() {}

    @Overrides(source="Bar1")
    void foo2() {}

    @Overrides(source="Bar2")
    void bar1() {}

    @Overrides(source="Foo1")
    void bar2() {}
}
有没有办法做到这一点

解决方案(感谢Nikem):

可以创建自定义注释(Overrides.java)



您可以专门为此创建自己的注释。标准的
@Override
注释不允许这样做。

您可以专门为此创建自己的注释。标准的
@Override
注释不允许这样做。

Override注释只是一个标记和编译时检查,用于标记正在被重写的内容,而不考虑被重写的方法来自何处。如前所述,许多IDE可以向您展示方法所来自的接口/超类。如果您需要一种独立于IDE的方法来实现这一点,那么添加一条注释或javadocs,说明它来自哪个接口。

覆盖注释只是一个标记,并在编译时检查以标记正在被覆盖的内容,而不关心被覆盖的方法来自何处。如前所述,许多IDE可以向您展示方法所来自的接口/超类。如果您需要一种独立于IDE的方法来实现这一点,那么添加一条注释或javadocs,说明它来自哪个接口。

难道您不能将鼠标悬停在该方法上或右键单击它,让您的IDE告诉您它覆盖了什么吗?是的,但我希望使用一种独立于IDE的方法来明确说明它。您总是可以在您的应用程序中添加注释来源。还请注意,多个接口和/或一个超类可以声明具有相同签名的方法,因此一个方法可以重写多个类的/interfaces方法。@d请尝试,继续,蒙上眼睛,您将看到更少的内容。这是你的选择,但不要抱怨你什么都看不见。制作
source()
a
String
是个糟糕的选择。将其命名为
value()
并将其设置为
,并像
@Overrides(Foo1.Class)
一样使用它。这样可以避免在重命名接口/基类时出现打字错误、拼写错误和过时。难道你不能将鼠标移到该方法上或右键单击它,让IDE告诉你它覆盖了什么吗?是的,但我希望有一种独立于IDE的方式使其显式化。你总是可以在源代码中添加注释。还请注意,多个接口和/或一个超类可以声明具有相同签名的方法,因此一个方法可以重写多个类的/interfaces方法。@d请尝试,继续,蒙上眼睛,您将看到更少的内容。这是你的选择,但不要抱怨你什么都看不见。制作
source()
a
String
是个糟糕的选择。将其命名为
value()
并将其设置为
,并像
@Overrides(Foo1.Class)
一样使用它。这样,在重命名接口/基类时,您就可以避免打字错误、拼写错误和过时。每个人都可以有自己的要求,每个人也可以有自己的答案。@duffymo我会说:愚蠢。增加的价值不比简单地添加注释多。;-)可以重写自定义注释,以检查被重写的类是否确实包含该方法,并告诉您比普通重写更多的信息,例如“您正在尝试重写X,但X没有y”。而普通覆盖不知道您要覆盖什么。提到了一个更好的解决方案,即生成javadoc。生成的javadoc将把所有正在实现的接口列为“指定人:”部分。每个人都可以有自己的需求,每个人也可以有自己的答案。@duffymo我会说:愚蠢。增加的价值不比简单地添加注释多。;-)可以重写自定义注释,以检查被重写的类是否确实包含该方法,并告诉您比普通重写更多的信息,例如“您正在尝试重写X,但X没有y”。而普通覆盖不知道您要覆盖什么。提到了一个更好的解决方案,即生成javadoc。生成的javadoc将把所有正在实现的接口都列为“Specified by:”部分。非常好地提到了javadoc。它实际上会以“指定人:”部分的形式免费提供这些信息。除了生成javadoc之外,您不必做任何事情。示例::指定者:
intValue
在class
Number
中。既然OP需要信息,有什么比实际的文档更好呢?;-)非常好地提到了Javadoc。它实际上会以“指定人:”部分的形式免费提供这些信息。除了生成javadoc之外,您不必做任何事情。示例::指定者:
intValue
在class
Number
中。既然OP需要信息,有什么比实际的文档更好呢?;-)
public @interface Overrides 
{
    String source() default ""; 
}