java - 使用主体强制覆盖/扩展方法

标签 java inheritance annotations overriding

我正在寻找一种方法来轻松且频繁地强制用户覆盖已有主体的方法,调用 super 并可能添加一些代码。简单的例子是外部化过程,粗心的用户扩展类忘记覆盖外部化,这会导致以后不必要的麻烦,当其他人尝试外部化该对象时,发现它没有实现,并且必须理解别人的代码才能编写外部化。

我无法找到不包括将大多数类抽象化(这会破坏它们的使用)的可接受的解决方案。

是否可以使用注释做类似的事情?

class Bar{
    @SuggestOverride
    @Override
    public void foo(){}
}

这样,只要 foo() 没有被覆盖,IDE 就可以对用户扩展 Bar 喊叫。 (至少警告)(IDE Eclipse/Netbeans)

我对注释不是很熟悉,我不确定是否值得深入研究,只是为了发现它根本不可能。如果有人提出解决方案,我将非常感激。

谨致问候, 沃伊捷赫凯撒

编辑:我可能不够清楚,这里是示例代码

abstract class Foo{
    public abstract void method();
}

//instantiable
class Bar extends Foo{
    @Override
    public void method() {
        //some code
    }
}

//instantiable
class Socks extends Bar{
    //doesn't know about 'method'
}

最佳答案

也许可以选择具有包含抽象主体的基方法的抽象类:

abstract class Bar {

    public final void foo() {
        // add the base code for your method here
        // ...
        this.additionalWork();
    }

    // part that has to be overwritten
    public abstract void additionalWork();

}

关于java - 使用主体强制覆盖/扩展方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30150026/

相关文章:

java - Spring MVC 3.1 根据请求语言环境更改语言 i18n

java - 使用 Java 8 计算两个日期之间的天数,同时忽略一周中的某些天数

java - stub 方法时出现 InvalidUseOfMatchersException

javascript - 为什么这个对象的原型(prototype)的init函数不运行

java - 反射找不到注解

java - 使用 Play 对象验证十进制数

r - ggplot2 - 在绘图之外进行注释

java - 简单来说,什么是工厂?

PHP 从子上下文中以公共(public)方式调用 protected 方法

C# - 访问说明符 - 用于访问同一命名空间中的方法