我有这个方法
public <T> T PostQuery(String url, Object graph, Class<T> returnType)
我想这样称呼它
List<User> users = PostQuery("blabla", SomeObj, List<User>.class);
但是我在最后一个参数上出错了。它只允许我写List.class
,这使它成为一个字符串列表,而不是我想要的。
我怎样才能做到这一点?
由于泛型的 Java 实现(类型擦除),因此List<User>.class
不仅有List.class
. 因此,要么只使用 List.class,要么您可以创建第二个方法,该方法已经返回这样的列表
public List<T> T PostQueryList(String url, Object graph, Class<T> returnType)
List<User> users = PostQueryList("blabla", SomeObj, User.class);
如果您真的需要访问,您可能需要查看来自 Guava https://code.google.com/p/guava-libraries/wiki/ReflectionExplainedList<User>
的 TypeTokens
仅用User.class
作参数
据此: https ://stackoverflow.com/a/2226038/1264582 有一种解决方法。只需使用泛型类的子类。
可以使用public <T> T PostQuery(String url, Object graph){}
,因为您在声明时已为此方法声明了一个泛型类型<T>
:
public <T> T PostQuery(String url, Object graph){
Object obj = null;
//...
return (T)obj;
}