gpt4 book ai didi

java - 泛型类型上的 GSON(Java 集合)

转载 作者:行者123 更新时间:2023-12-02 00:05:13 24 4
gpt4 key购买 nike

我正在尝试使用 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com