具有通用返回类型的命令模式

时间:2019-05-02 16:19:47

标签: java eclipse generics design-patterns command-pattern

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

reviewing this answer on 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一直抱怨:

  

SearchResultsPage类型的方法execute(ArrayList,T)   必须重写或实现超类型方法

但是当我单击

  

在超类型命令中创建execute()

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

我该如何解决?

谢谢!

1 个答案:

答案 0 :(得分:1)

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

将类方法中的T声明移至类本身。

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