如何将实现接口>的 List< 对象传递给方法?
2022-09-02 11:38:19
我有一个包含几种方法的servlet,这些方法从DAO获取对象列表,将列表转换为JSON,然后在响应中将其发送回去。每个列表都由具有以下方法的对象组成:
public String getAsJson(){...}
servlet 有一堆基本相同的方法,如下所示:
private String getUserListAsJson() {
List<User> userList = this.dao.getUsers();
StringBuilder builder = new StringBuilder();
builder.append('[');
// loops over the list appending the value of each objects getAsJson()
builder.append(']');
return builder.toString();
}
问题是我有大约6种方法(并且还在增长),除了不同的DAO查询外,它们看起来完全一样。我的想法是创建一个只有方法定义的接口,让每个bean实现它,然后在servlet中有另一个方法,它获取实现该接口的对象。最终看起来像这样:getAsJson()
public Interface JsonEnabled {
public String getAsJson();
}
public class User implements JsonEnabled {
....
@Override
public String getAsJson() {...}
}
public class TheServlet {
...
private String getUserListAsJson() {
List<User> userList = this.dao.getUsers();
return this.getListAsJson(userList);
}
private String getListAsJson(List<? implements JsonEnabled> list) {
// The loop code that is in each method.
}
}
但是,这不会编译。从Oracle中查找一些文档后,您只能有泛型参数的扩展,而不能有实现。使所有类都从仅具有getAsJson()方法的抽象类扩展在语义上没有意义(这些类是不相关的)。
我还没有在SO上找到一个好的解决方案,或者只是谷歌搜索,所以任何帮助/见解将不胜感激。