Autore Topic: Type e TypeToken  (Letto 315 volte)

Offline tonno16

  • Utente storico
  • *****
  • Post: 1197
  • Respect: +58
    • Mostra profilo
  • Dispositivo Android:
    moto g
  • Play Store ID:
    Diego Tonini
  • Sistema operativo:
    OpenSuse
Type e TypeToken
« il: 30 Aprile 2015, 12:09:48 CEST »
0
Buon giorno.

Ho una classe Ciuccio<I> che ovviamente fa uso dei generici.
Ciucco deve parsare una stringa e ritornare una List<I>.

Mettiamo caso che instanzio con Ciuccio<MiaClasse>.
In un metodo apposito ho:
Codice (Java): [Seleziona]
 Type tt = new TypeToken<List<MiaClasse>>() {
        }.getType();
        List<I> list2 = new Gson().fromJson(getJsonStringFromFile(), tt);

esso funziona perfettamente. Ovviamente non va bene, poichè la classe è generica per definizione e non posso piazzare in quel metodo la parola MiaClasse. Dunque mi sembrava giusto metterci List<I> al posto di List<MiaClasse>. Eppure AS se ne esce con vari errori per cui com.google.gson non può essere bla bla bla.
Dunque ora passo al costruttore di pippo un Type t. Quindi nella mia Activity faccio Type t = new TypeToken<List<MiaClasse>(){}.getType();

Però non capisco perchè deve generare errore. Per intenderci, la classe coi generic i lavora bene. Difatti questo è un solo metodo. Gli altri funzionano perfettamente

Offline iceweasel

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 878
  • Respect: +147
    • Mostra profilo
  • Dispositivo Android:
    LGE P990 - Google Nexus 5
  • Sistema operativo:
    Linux Debian Sid
Re:Type e TypeToken
« Risposta #1 il: 01 Maggio 2015, 11:16:36 CEST »
0
Prima di tutto Android Studio non genera nessun errore, riporta semplicemente gli errori del compilatore Java.

È importantissimo quando segnali un errore riportare l'errore del compilatore, senza omettere nulla.

L'ultima tua riga di codice ha un palese errore di sintassi, manca un carattere '>'.

Inviato dal mio Nexus 5 utilizzando Tapatalk

adb logcat | tee /tmp/logcat | grep TAG

Offline tonno16

  • Utente storico
  • *****
  • Post: 1197
  • Respect: +58
    • Mostra profilo
  • Dispositivo Android:
    moto g
  • Play Store ID:
    Diego Tonini
  • Sistema operativo:
    OpenSuse
Re:Type e TypeToken
« Risposta #2 il: 01 Maggio 2015, 14:39:53 CEST »
0
Non no alcun errore di sintassi. Altrimenti non si avvierebbe l' apk. Il problema che se passo a questa classe generica un typetoken, allora funziona perfettamente. La classe in questione usa la I maiuscola sinonimo di generico. Ovvismente io istanzio un oggetto di tale classe dichiarando <MiAClasse>.

Quindi la classe stessa già sa che al posto di I sto usando MiaClasse. Ora in quel metodo dove Gson deve fare il suo lavoro, mi serve specificare il typetoken. Il metodo postato ritorna appunto un typetoken. L' app funziona bene se viene passato come parametro nel costruttore. La classe generica invece non riesce a capire il reale TypeToken e il tutto craaha.
Mi aspetterebbe il contrario perché non vedo molte differenze rispetto alla soluzione funzionante