Как создать подклассы с конкретными параметрами

У меня есть класс Transaction и интерфейс службы

public class Transaction {}

public interface RequestService {
    public String getRequest(Transaction transaction);
}

Теперь я хочу создать подкласс класса Transaction и иметь конкретный класс для интерфейса службы

public class ESPTransaction extends Transaction {}

public class ESPRequestService implements RequestService {
    @Override
    public String getRequest(ESPTransaction espTransaction) {
        StringBuffer buff = new StringBuffer(espTransaction.someMethodThatDoesntExistInParentClass());
        return buff.toString();
    }
}

IDE жалуется, что, хотя ESPTransaction подклассов Transaction, я не переопределяю метод супертипа.

Как я могу это реализовать?

1 ответ

Решение

Как отмечает IDE, ESPRequestService не правильно реализует RequestService, так как у него нет getRequest(Transaction) метод.

Одно из аккуратных решений - сделать интерфейс универсальным, чтобы каждый RequestService Реализация может указывать тип Transaction он ожидает:

public interface RequestService<T extends Transaction> {
    public String getRequest(T transaction);
}

public class ESPRequestService implements RequestService<ESPTransaction> {
    @Override
    public String getRequest(ESPTransaction espTransaction) {
        StringBuffer buff = new StringBuffer(espTransaction.someMethodThatDoesntExistInParentClass());
        return buff.toString();
    }
}
Другие вопросы по тегам