我有这个方法
public <T> T PostQuery(String url, Object graph, Class<T> returnType)
我希望像这样称呼它
List<User> users = PostQuery("blabla", SomeObj, List<User>.class);
但是我在最后一个论点上得到了错误。它允许我只写List.class
,这使它成为字符串列表,而不是我想要的。
我该怎么做?
答案 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;
}