W jaki sposób można przekazać obiektowi List <obiekty, które implementują interfejs> do metody?

Mam serwlet, który przekazał parametry zapytania, pobiera listę obiektów z DAO, zamienia listę w JSON i wysyła ją z powrotem w odpowiedzi. Każda lista składa się z obiektów, które mają metodę:

<code>public String getAsJson(){...}
</code>

A serwlet ma kilka metod, które wyglądają jak:

<code>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();
}
</code>

Problem polega na tym, że mam około 6 metod (i rośnie), które wyglądają dokładnie tak samo, z wyjątkiem różnych zapytań DAO. Moim pomysłem było stworzenie interfejsu, który miałby tylko definicję metody getAsJson (), aby każdy komponent bean implementował ją, a następnie inną metodę w serwletu, która pobierała obiekty, które implementowały ten interfejs. Skończyło się tak:

<code>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.
    }
}
</code>

Więc jeśli ktoś rzeczywiście przeczytał ten daleko = P, to nie kompiluje się i po przejrzeniu jakiejś dokumentacji z Oracle możesz mieć tylkorozciąga się i nienarzędzia dla parametrów ogólnych. Uczynienie wszystkich klas z klasy abstrakcyjnej, która ma właśnie metodę getAsJson (), nie ma sensu semantycznego (klasy są niepowiązane).

Nie znalazłem dobrego rozwiązania na SO lub po prostu googlując, więc każda pomoc / wgląd zostanie doceniona.

questionAnswers(2)

yourAnswerToTheQuestion