Java: Factorisation de code et génériques

Répondre
Partager Rechercher
Bonjour,

Je n'ai pas beaucoup d'expérience en java, et je cherche à factoriser du code très dupliqué en utilisant les génériques (ou templates dans mon vocabulaire à moi). Je me heurte à quelques soucis.

Tout d'abord, voici un exemple du code qui est dupliqué:

Code:
    private void readsFoo() throws Exception {
        JsonArray jsonArray = getJsonArray(foo_field);

        Type listType = new TypeToken<List<Foo>>() {
        }.getType();

        List<Foo> fooList= gson.fromJson(jsonArray, listType);

        for (Foo foo : fooList) {
            .....
        }
    }

    private void readsGoo() throws Exception {
        JsonArray jsonArray = getJsonArray(goo_field);

        Type listType = new TypeToken<List<Goo>>() {
        }.getType();

        List<Goo> gooList= gson.fromJson(jsonArray, listType);

        for (Goo goo : gooList) {
            .....
        }
    }
Voici ensuite ce que donne mon code:

Code:
    private void readsFoo() throws Exception {
        JsonArray jsonArray = getJsonArray(foo_field);
        List<Foo> fooList = getElementsList(jsonArray);

        for (Foo foo: fooList ) {
           .....
        }
    }

    private <T> List<T> getElementsList(JsonArray iArray)
    {
        Type listType = new TypeToken<List<T>>() {}.getType();
        validateJsonElement(listType, "In getElementsList: Unable to find field TypeTokens");
        
        List<T> list = gson.fromJson(iArray, listType);
        validateJsonElement(list, "In getElementsList: Unable to find list from Json");

        return list;
    }
À l'exécution, java me renvoie l'exception suivante:

java.lang.ClassCastException: com.google.gson.internal.LinkedTreeMap cannot be cast to ....json.Foo

J'ai cru comprendre que Java ne retenait pas le type du générique à la compilation. Je suppose que le problème vient de là mais je ne trompe peut-être.

Y'a t'il une solution implémentation ? je suppose que oui sinon comment pourrait-on avoir des listes, vecteurs, etc ... capables de travailler avec n'importe quel type d'objet ??

Merci

Dernière modification par Zangdar MortPartout ; 15/08/2016 à 17h32.
Répondre
  • »
 
1 connecté (0 membre et 1 invité) Afficher la liste détaillée des connectés