J'essaie de sauvegarder un objet d'une classe en utilisant Gson, mais malheureusement cela ne fonctionne pas. Ma classe implémente l'interface de collection à l'aide d'une ArrayList. Quand j'essaye d'obtenir la chaîne de JSON j'obtiens une erreur laide. Voici un code:GSON sur les types génériques (Java Collection)
public class Prob1<T> implements Collection<T>{
ArrayList<T> alb = new ArrayList<>();
@Override
public boolean add(T e) {
// TODO Auto-generated method stub
alb.add(e);
return false;
}
@Override
public boolean addAll(Collection<? extends T> c) {
// TODO Auto-generated method stub
return false;
}
@Override
public void clear() {
// TODO Auto-generated method stub
}
@Override
public boolean contains(Object o) {
// TODO Auto-generated method stub
return alb.contains(o);
}
@Override
public boolean containsAll(Collection<?> c) {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean isEmpty() {
// TODO Auto-generated method stub
return alb.isEmpty();
}
@Override
public Iterator<T> iterator() {
// TODO Auto-generated method stub
return null;
}
@Override
public boolean remove(Object o) {
// TODO Auto-generated method stub
alb.remove(o);
return false;
}
@Override
public boolean removeAll(Collection<?> c) {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean retainAll(Collection<?> c) {
// TODO Auto-generated method stub
return false;
}
@Override
public int size() {
// TODO Auto-generated method stub
return alb.size();
}
@Override
public Object[] toArray() {
// TODO Auto-generated method stub
return null;
}
@Override
public <T> T[] toArray(T[] a) {
// TODO Auto-generated method stub
return null;
}
public String toString() {
return alb.toString();
}
Ici, il est ma tentative pour obtenir la chaîne JSON en utilisant GSon:
Prob1 p = new Prob1<String>();
p.add("Johny");
p.add("Albus");
p.add("Sirrius");
System.out.println(p);
Gson gson = new Gson();
String json = gson.toJson(p);
Et voici l'erreur que je reçois:
Exception dans le thread " main "java.lang.NullPointerException at com.google.gson.internal.bind.CollectionTypeAdapterFactory $ Adapter.write (CollectionTypeAdapterFactory.java:95) at com.google.gson.internal.bind.Collection TypeAdapterFactory $ Adapter.write (CollectionTypeAdapterFactory.java:60) at com.google.gson.Gson.toJson (Gson.java:586) at com.google.gson.Gson.toJson (Gson.java:565) à com.google.gson.Gson.toJson (Gson.java:520) à com.google.gson.Gson.toJson (Gson.java:500) à Prob1.main (Prob1.java:104)
Des pensées?
Le problème n'est pas avec Gson, c'est avec votre implémentation 'Collection' (à laquelle la réponse ci-dessous fait allusion). Vous ne pouvez pas retourner 'null' de' iterator() '. Gson n'a aucun problème de sérialisation/désérialisation des collections à condition qu'elles soient correctement écrites et adhèrent à l'interface. –
En outre ... êtes-vous certain que vous êtes supposé utiliser un 'ArrayList'? C'est * une * Collection'. Vous pouvez simplement retourner le 'Iterator' de sa méthode' iterator() 'si c'est le cas. –