我有一個servlet,通過查詢參數傳遞,從DAO獲取對象列表,將列表轉換爲JSON,並將其發回給響應。每個列表由有方法的對象:如何將List <實現接口的對象>傳遞給方法?
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查詢外,看起來完全一樣。我的想法是創建一個只有getAsJson()方法定義的接口,讓每個bean都實現它,然後在servlet中使用實現了該接口的對象的另一個方法。最終看上去像這樣:
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.
}
}
所以,如果有人實際上已經讀到了這裏= P,即不編譯和仰視從Oracle一些文件後,你只能有延伸,而不是實現爲通用參數。使所有的類從一個只有getAsJson()方法的抽象類擴展到語義上沒有意義(類是無關的)。
我還沒有找到一個很好的解決方案,或只是谷歌搜索,所以任何幫助/見解將不勝感激。
tangental,但你真的想自己建立JSON字符串嗎?建議使用像傑克遜或其他東西的圖書館 – 2012-04-10 13:58:38