- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 Gson 保存类的对象,但不幸的是它不起作用。我的类正在使用 ArrayList 实现 Collection 接口(interface)。当我尝试获取 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);
这是我得到的错误:
Exception in thread "main" java.lang.NullPointerException at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.write(CollectionTypeAdapterFactory.java:95) at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.write(CollectionTypeAdapterFactory.java:60) at com.google.gson.Gson.toJson(Gson.java:586) at com.google.gson.Gson.toJson(Gson.java:565) at com.google.gson.Gson.toJson(Gson.java:520) at com.google.gson.Gson.toJson(Gson.java:500) at Prob1.main(Prob1.java:104)
有什么想法吗?
最佳答案
您创建的集合违反了 interface 给出的契约(Contract)。这是让你的类(class)用户出现奇怪行为的秘诀。我检查了 Gson 源代码,特别是对于您的情况,它看起来会进入 NullPointerException ,因为您在 iterator() 方法中返回 null 。
我不确定您为什么要创建自己的 Collection 类,以及您是否真的需要这样做。如果您这样做,我建议您延长 ForwardingCollection来自 Google guava,并且仅重写您真正需要重写的方法。
关于java - 泛型类型上的 GSON(Java 集合),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14028571/
我是一名优秀的程序员,十分优秀!