【发布时间】:2012-12-25 07:22:13
【问题描述】:
我正在尝试使用 Gson 保存类的对象,但不幸的是它不起作用。 我的班级正在使用 ArrayList 实现 Collection 接口。当我尝试获取 json 字符串时,我得到了一个丑陋的错误。这是一些代码:
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();
}
}
这是我尝试使用 GSon 获取 JSON 字符串:
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);
这是我得到的错误:
线程“main”中的异常 java.lang.NullPointerException 在 com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.write(CollectionTypeAdapterFactory.java:95) 在 com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.write(CollectionTypeAdapterFactory.java:60) 在 com.google.gson.Gson.toJson(Gson.java:586) 在 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)
有什么想法吗?
【问题讨论】:
-
问题不在于 Gson,而在于您的
Collection实现(下面的答案暗示了这一点)。您不能从iterator()返回null。 Gson 没有问题序列化/反序列化集合,只要它们被正确编写并遵守接口。 -
另外......你确定你应该使用
ArrayList吗?那是Collection。如果是这种情况,您可以简单地从其iterator()方法中返回Iterator。