私は、クエリパラメータに渡されたDAOからオブジェクトのリストを取得し、リストをJSONに変換して返信するサーブレットを持っています。すべてのリストは、法持つオブジェクトで構成されていますList <インターフェイスを実装するオブジェクト>をメソッドに渡すにはどうすればよいですか?
public String getAsJson(){...}
をし、サーブレットは次のようになり、ほとんどindentical方法の束を持っています
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にそれを実装させ、サーブレットにそのインターフェイスを実装したオブジェクトを持つ別のメソッドを持たせることでした。このように見てしまった:誰もが実際にこのはるか= Pを読み取った場合、コンパイルされないこと、およびOracleからいくつかのドキュメントを検索した後、あなただけがなく実装を拡張することができますので、
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.
}
}
ジェネリックパラメータの場合すべてのクラスを抽象クラスから継承することは、getAsJson()メソッドだけで意味が分かりません(クラスは無関係です)。
私はSOの良い解決策を見つけたり、まさにグーグルグーグルではないので、どんな助けや洞察力もありがとうございます。
一般的なワイルドカードについては
tangentalしかし、実際にJSON文字列を自分で作成したいですか?ジャクソンなどの図書館を使用するように提案する –