【问题标题】:Command Pattern with Generic Return Type具有通用返回类型的命令模式
【发布时间】:2019-09-21 05:12:21
【问题描述】:

我正在尝试用 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) 必须重写或实现超类型方法

但是当我点击时

在超类型Command中创建execute()

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

我该如何解决这个问题?

谢谢!

【问题讨论】:

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


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2016-12-16
    • 2019-03-29
    • 1970-01-01
    • 1970-01-01
    • 2012-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-28
    相关资源
    最近更新 更多