从方法而不是Object返回通用对象

时间:2016-07-13 12:14:39

标签: java object generics types gson

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()方法只返回一个Object而不是Person对象?

1 个答案:

答案 0 :(得分:0)

您肯定需要instanceof支票。

我没有使用GSON,但是org.jsons get方法总是返回一个Object。

还有其他方法,例如getBoolean()getInteger()等。

因此,您必须使用此方法获取显式数据类型,或者使用instanceof进行检查并投射它。