2016-07-13 4 views
-1
static class Person { 
    String name; 
    ArrayList<Person> friends; 

    public Person(String name, ArrayList<Person> friends) { 
     this.name = name; 
     this.friends = friends; 
    } 
} 

static class Converter { 

    String raw; 
    Gson gson; 

    public Converter() { 
     this.gson = new Gson(); 
    } 

    public <T> T get(Class<T> cls) { 
     return gson.fromJson(raw, cls); 
    } 

    public void set(String json) { 
     this.raw = json; 
    } 
} 

public static void main(String[] args) { 
    Gson gson = new Gson(); 
    ArrayList<Person> friends = new ArrayList<>(); 
    friends.add(new Person("craig", new ArrayList<Person>())); 
    friends.add(new Person("andrew", new ArrayList<Person>())); 
    Person alex = new Person(
      "alex", 
      friends 
    ); 

    String rawJson = gson.toJson(alex); 

    Converter c = new Converter(); 
    c.set(rawJson); 
    Person p = c.get(Person.class); //This gives an incompatible type error 
} 

私はオブジェクトを返そうとしているクラスコンバーターを持っています。アイデアは未加工のjsonを与えて、それから(Person.class)を取得すると、Personオブジェクトを取得します。オブジェクトの代わりにメソッドからジェネリックオブジェクトを返す

これは問題の基本的な例ですが、get()メソッドはPersonオブジェクトではなくObjectを返すのはなぜですか?

+0

私はそれが私のために働いたコードを試しました –

+0

@KevinWallisはい私も持っています。今働いているようだ。わからない理由 –

答えて

0

あなたは確かにinstanceofチェックが必要です。

私はGSONを使用していませんが、org.jsons getメソッドは常にObjectを返します。

getBoolean()のような他の方法がありますが、getInteger()など

だから、明示的なデータ型を取得したり、あなたがinstanceofでそれをチェックして、それをキャストするために、このメソッドを使用する必要があります。

+0

gson.fromJson(raw、cls); cls型のオブジェクトを返します。キャストする必要はありません。奇妙なことに、この問題は解決したように見え、私のメソッドは正しく返されます。なぜ私はこれを更新します –

+0

それはちょうどJavaです。 – Steffx115

+0

時にはそれが望むことをする – Steffx115

関連する問題