假设我有这两个类,一个扩展另一个
public class Bar{
public void foo(){
}
}
public class FooBar extends Bar {
@Override
public void foo(){
super.foo(); //<-- Line in question
}
}
我想要做的是警告用户foo
如果他们没有在覆盖方法中调用超类的方法,这可能吗?
或者有没有办法知道,如果我将类类型传递给超类,则使用反射来覆盖其超类的方法的方法调用原始方法?
例如:
public abstract class Bar{
public Bar(Class<? extends Bar> cls){
Object instance = getInstance();
if (!instance.getClass().equals(cls)) {
throw new EntityException("The instance given does not match the class given.");
}
//Find the method here if it has been overriden then throw an exception
//If the super method isn't being called in that method
}
public abstract Object getInstance();
public void foo(){
}
}
public class FooBar extends Bar {
public FooBar(){
super(FooBar.class);
}
@Override
public Object getInstance(){
return this;
}
@Override
public void foo(){
super.foo();
}
}
甚至我可以在超级方法上添加一个注释,以便表明它需要被调用?
编辑
注意,需要调用 foo 方法的不是超类,而是调用子类的 foo 方法的人,例如数据库close
方法
如果归根结底,我什至会很高兴使该方法“不可覆盖”,但仍想给它一个自定义消息。
编辑 2
这在某种程度上是我想要的:
但是拥有上述内容仍然会很好,或者甚至给他们一个自定义消息来做其他事情,比如,Cannot override the final method from Bar, please call it from your implementation of the method instead