如何获得通用列表的类类型?

时间:2013-04-06 13:29:48

标签: java generics

我有这个方法

public <T> T PostQuery(String url, Object graph, Class<T> returnType)

我希望像这样称呼它

List<User> users = PostQuery("blabla", SomeObj, List<User>.class);

但是我在最后一个论点上得到了错误。它允许我只写List.class,这使它成为字符串列表,而不是我想要的。

我该怎么做?

4 个答案:

答案 0 :(得分:3)

由于Java实现了泛型(类型擦除),因此List<User>.class只有List.class public List<T> T PostQueryList(String url, Object graph, Class<T> returnType) List<User> users = PostQueryList("blabla", SomeObj, User.class); 。所以使用或者只使用List.class,或者你可以创建第二个已经返回像这样的列表的方法

List<User>

如果您确实需要访问{{1}},可能需要查看来自Guava {4}}的TypeTokens

答案 1 :(得分:0)

仅使用User.class作为参数

答案 2 :(得分:0)

根据这个: https://stackoverflow.com/a/2226038/1264582 有一个解决方法。只需使用泛型类的子类。

答案 3 :(得分:-1)

使用public <T> T PostQuery(String url, Object graph){}就行了,因为在声明<T>时声明了此方法的泛型类型:

public <T> T PostQuery(String url, Object graph){
    Object obj = null;
    //...
    return (T)obj;
}