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 
} 

개체를 반환하려고하는 클래스 변환기가 있습니다. 아이디어는 당신이 raw 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