これら2つのクラスがあり、一方が他方を拡張しているとしましょう
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