私はこのようなことを達成したい: 抽象メソッドを定義する
public abstract void registerError(*any subclass of an ErrorVO or ErrorVO e);
そして実際の実装メソッドのサブクラスで:
public void registerError(ASubclassOfErrorVO e);
助けてくれてどうもありがとう!
次のように、クラスの宣言でジェネリックを使用できます。
static abstract class Parent<T extends ErrorVO> {
public abstract void registerError(T e);
}
static class Child extends Parent<ASubclassOfErrorVO> {
@Override
public void registerError(ASubclassOfErrorVO e) {
}
}
のは、を拡張するクラスとして<T extends errorVO>
定義されます。これがメソッド宣言だけでは機能しない理由は、親のメソッドをオーバーライドする可能性のある多くのメソッドをサブクラスに含めることができるためです。クラス レベルで型を宣言することによってのみ、コンパイラはどのメソッドがオーバーライドされているかを認識します。T
errorVO
T
public abstract class A <T extends ErrorVO> {
public abstract void register(T e);
}
public class B extends A<SubclassOfErrorVO> {
@Override
public void register(SubclassOfErrorVOe e) {
}
}