Использование обобщений в качестве параметра метода Java - PullRequest
1 голос
/ 09 февраля 2020

У меня есть интерфейс:

    public interface DDLOperation <T extends Artifact> {

    public void alter(T artifact);

    public void create(T artifact);

    public void drop(T artifact);

} 

У меня также есть абстрактный класс, реализующий этот интерфейс:

    public abstract class AbstractDDLOperation <T extends Artifact> implements DDLOperation {

    @Override
    public abstract void alter(T artifact);

    @Override
    public abstract void create(T artifact);

    @Override
    public abstract void drop(T artifact);

    public void processChildElement(Element childElement) {
        Artifact artifact = createArtifact(childElement);
        alter(artifact);
    }
}

Eclipse выдает эту ошибку в классе AbstractDDLOperation: Метод alter (T) типа AbstractDDLOperation должен переопределить или реализовать метод супертипа

Я хочу, чтобы все подклассы, реализующие AbstractDDLOperation, передавали параметры различного типа, все из класса Artifact в методы alter, create и drop.

Кто-нибудь может дать предложение по этому вопросу?

Спасибо.

1 Ответ

3 голосов
/ 09 февраля 2020

Ваш класс должен реализовывать DDLOperation<T>, а не необработанный DDLOperation.

Он должен быть:

public abstract class AbstractDDLOperation <T extends Artifact> implements DDLOperation<T>

В противном случае методы вашего абстрактного класса не переопределяют и не реализуют какие-либо методов типа super (interface), поэтому аннотация @Override неверна.

...