我正在尝试用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
(即与我创建的签名完全相同的签名),但错误消息不会消失。
我该如何解决?
谢谢!
答案 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) {
// ...
}
}