1

我有三个班。B从A延伸,C从B延伸。在那种情况下,我得到了一个重复的方法错误。我怎样才能避免这个错误?

我需要这两个顶级水平,我不想将它们组合在一个类中。

 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

你似乎有点困惑。目前,updateB 中的方法不会覆盖updateA 中的方法,因为它们没有相同的签名。

您想要的是 B 和 A 的泛型类型相同,因此这update(T)在两个类中意味着相同的事情。这很容易通过如下声明 B 类来解决:

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

顺便说一句,使用@Override注释是一种很好的做法,您可以将其update放在 B 中的方法之前。它会告诉您,在您当前的版本中,您没有覆盖父方法。

现在, aB<T>也是 an A<T>(而在您的版本中, aB<T>是 an A<AbstractEntity>)。

于 2013-08-01T08:07:09.070 回答