0

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);

そして、ここに私が得るエラーがあります:

com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.write の com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.write(CollectionTypeAdapterFactory.java:95) でのスレッド「メイン」java.lang.NullPointerException の例外(CollectionTypeAdapterFactory.java:60) com.google.gson.Gson.toJson(Gson.java:586) com.google.gson.Gson.toJson(Gson.java:565) com.google.gson.Gson. Prob1.main(Prob1.java:104) の com.google.gson.Gson.toJson(Gson.java:500) の toJson(Gson.java:520)

何かご意見は?

4

1 に答える 1

3

interfaceによって与えられた契約を破るコレクションを作成しました。これは、クラスのユーザーに奇妙な振る舞いをさせるためのレシピです。NullPointerException私はGsonソースをチェックしましたが、特にあなたのケースでは、 iterator() メソッドで null を返しているため、 a に入るように見えます。

独自の Collection クラスを作成する理由と、本当にそれを行う必要があるかどうかはわかりません。その場合は、 Google グアバからForwardingCollectionを拡張し、本当にオーバーライドする必要があるメソッドのみをオーバーライドすることをお勧めします。

于 2012-12-25T07:36:20.373 に答える