Ich habe ein Servlet, das, übergeben auf Abfrageparameter, eine Liste von Objekten aus dem DAO, verwandelt die Liste in JSON und sendet es zurück in der Antwort. Jede Liste besteht aus Objekten, die eine Methode haben:Wie können Sie eine List <Objekte, die eine Schnittstelle implementieren> an eine Methode übergeben?
public String getAsJson(){...}
Und das Servlet hat eine Reihe von meist indentical Methoden, die wie folgt aussehen:
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();
}
Das Problem ist, dass ich etwa 6 Methoden (und wachsen), die abgesehen von verschiedenen DAO-Abfragen genau so aussehen. Meine Idee war, eine Schnittstelle zu erstellen, die nur die Definition für die getAsJson() -Methode hatte, von jeder Bean zu implementieren und dann eine andere Methode im Servlet zu verwenden, die Objekte übernahm, die diese Schnittstelle implementierten. Am Ende sieht aus wie diese:
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.
}
}
Also, wenn jemand dies tatsächlich gelesen hat weit = P, das nicht zusammenstellen und nach einer Dokumentation von Oracle nach oben, können Sie nur haben erweitert und nicht implementiert für generische Parameter. Wenn alle Klassen von einer abstrakten Klasse ausgehen, die nur die getAsJson() -Methode hat, ergibt dies keinen semantischen Sinn (die Klassen sind nicht verwandt).
Ich habe keine gute Lösung für SO gefunden oder einfach nur gegoogelt, so dass jede Hilfe/Einsicht geschätzt würde.
tangential aber möchten Sie wirklich JSON Saiten selbst bauen? Schlage vor, eine Bibliothek wie Jackson oder etwas anderes zu benutzen –