1

私は3つのクラスを持っています。B は A から拡張され、C は B から拡張されます。その場合、メソッドの重複エラーが発生しました。このエラーを回避するにはどうすればよいですか?

この 2 つの最上位レベルが必要ですが、それらを 1 つのクラスにまとめたくありません。

 public abstract class A<T extends AbstractBaseEntity> implements Serializable {

    protected T update(final T entity) {
        final EntityManager entityMgr = getEntityManager();

        final T result = entityMgr.merge(entity);
        entityMgr.flush();
        entityMgr.refresh(result);
        return result;

    }
}

public abstract class B <T extends AbstractEntity> extends A<AbstractEntity> {

    public B() {
        super();
    }

    protected T update(final T entity) {
        // Some other validations
        return (T) super.update(entity);
    }

}

public class C extends B<AbstractEntity> {


    public C() {
        super();
    }

}

ここに画像の説明を入力

PS: AbstractEntity は AbstractBaseEntity を拡張します

4

1 に答える 1

2

あなたは少し混乱しているようです。現時点ではupdate、B のメソッドは A のメソッドをオーバーライドしませupdateん。これは、同じ署名がないためです。

あなたが望むのは、 B と A のジェネリック型が同じであることですupdate(T)。つまり、両方のクラスで同じことを意味します。これは、次のように B クラスを宣言することで簡単に解決できます。

public abstract class B <T extends AbstractEntity> extends A<T>

ところで、 B のメソッドの@Override前に配置できる注釈を使用するupdateことをお勧めします。現在のバージョンでは、親メソッドをオーバーライドしていないことがわかります。

現在、 aB<T>もですA<T>(一方、あなたのバージョンでは、 aB<T>は ですA<AbstractEntity>)。

于 2013-08-01T08:07:09.070 に答える