Force override/extension of method with body
Force override/extension of method with body
我正在寻找一种方法来轻松且经常强制用户重写已经有主体的方法,调用 super 并可能添加一些代码。简单的例子是外部化过程,粗心的用户扩展 class 忘记覆盖外部化,这会导致以后不必要的麻烦,当其他人试图外部化该对象时,发现它没有实现并且必须通过理解别人的代码只是为了编写外部化。
我无法找到可接受的解决方案,该解决方案不包括将大部分 classes 抽象化(这会扰乱它们的使用)。
是否可以用注释做类似的事情?
class Bar{
@SuggestOverride
@Override
public void foo(){}
}
只要 foo() 未被覆盖,这种方式就可以 IDE 对扩展 Bar 的用户大喊大叫。 (至少警告)(IDE Eclipse/Netbeans)
我对注解不是很熟悉,我不确定是否值得深入研究,发现根本不可能。如果有人提出解决方案,我将不胜感激。
谨致问候,
Vojtěch Kaiser
编辑:我可能不够清楚,这里是示例代码
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'
}
也许带有包含抽象主体的基本方法的抽象 class 是一个选项:
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();
}
我正在寻找一种方法来轻松且经常强制用户重写已经有主体的方法,调用 super 并可能添加一些代码。简单的例子是外部化过程,粗心的用户扩展 class 忘记覆盖外部化,这会导致以后不必要的麻烦,当其他人试图外部化该对象时,发现它没有实现并且必须通过理解别人的代码只是为了编写外部化。
我无法找到可接受的解决方案,该解决方案不包括将大部分 classes 抽象化(这会扰乱它们的使用)。
是否可以用注释做类似的事情?
class Bar{
@SuggestOverride
@Override
public void foo(){}
}
只要 foo() 未被覆盖,这种方式就可以 IDE 对扩展 Bar 的用户大喊大叫。 (至少警告)(IDE Eclipse/Netbeans)
我对注解不是很熟悉,我不确定是否值得深入研究,发现根本不可能。如果有人提出解决方案,我将不胜感激。
谨致问候, Vojtěch Kaiser
编辑:我可能不够清楚,这里是示例代码
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'
}
也许带有包含抽象主体的基本方法的抽象 class 是一个选项:
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();
}