具有通用 Return 类型的命令模式

Command Pattern with Generic Return Type

我正在尝试使用 Java 中的通用 return 类型实现 Command Pattern

reviewing this answer on SO 之后,我创建了一个 Command class(界面),如下所示:

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 一直抱怨:

The method execute(ArrayList, T) of type SearchResultsPage must override or implement a supertype method

但是当我点击

Create execute() in supertype Command

Eclipse 自动在 Command class 中生成方法 T execute(ArrayList<String> list, T type); (即,与我创建的完全相同的签名)但错误消息并没有消失。

我该如何解决这个问题?

谢谢!

您对 execute 方法的实施不正确。您已经使用 T 类型参数使接口通用,但是在具体 class SearchResultsPage 中实现它时没有提供类型参数。这意味着您已经实现了接口的原始形式。相反,当方法在接口中不是通用的时,您已经使方法本身成为通用的。

将 class 方法中 T 的声明移动到 class 本身。

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