Шаблон команды с общим типом возврата - PullRequest
1 голос
/ 02 мая 2019

Я пытаюсь реализовать Command Pattern с универсальным типом возврата в Java.

После рассмотрения этого ответа на SO я создал Command класс (интерфейс), которыйвыглядит следующим образом:

public interface Command <T> {

    T execute(ArrayList<String> list, T type);
}

public class SearchResultsPage implements Command{

    @Override
    public <T extends List<ProductPOJO>>  T execute(ArrayList<String> list, T type) {

    List<ProductPOJO> productPOJOList = generatePOJOFromSearch(list);

    type.addAll(productPOJOList);

    return type;
    }
}

Однако Eclipse продолжает жаловаться, что:

Метод execute (ArrayList, T) типа SearchResultsPage должен переопределить или реализовать метод супертипа

Но когда я нажимаю

Создать execute () в супертипе Command

Eclipse автоматически генерирует метод T execute(ArrayList<String> list, T type); в Command классе (т.е.Точно такая же подпись, как у меня), но сообщение об ошибке не исчезает.

Как это исправить?

Спасибо!

1 Ответ

1 голос
/ 02 мая 2019

Ваша реализация метода execute неверна. Вы сделали интерфейс универсальным с параметром типа T, но не указали аргумент типа при реализации его в конкретном классе SearchResultsPage. Это означает, что вы реализовали необработанную форму интерфейса. Вместо этого вы сделали сам метод универсальным, когда он не является универсальным в интерфейсе.

Переместите объявление T в методе класса в сам класс.

public class SearchResultsPage<T extends List<ProductPOJO>> implements Command<T> {
    @Override
    public T execute(ArrayList<String> list, T type) {
        // ...
    }
}
...