4

我有以下方法:

public <T> execute(HttpRequest request) {
   ...
   // in parseAs i have to pass Class<T> how can I instantiate it from T?
   request.execute().parseAs(classT);
}

PS:parseAs 是来自google http 客户端库的方法。

4

1 回答 1

5

您不能使用这些参数。

Java 的泛型使用称为类型擦除的东西——基本上所有这些都在运行时T变为。Object因此,如果您确实需要知道这T是什么类,则需要传入一个Class对象。这正是parseAs正在做的事情 -parseAs<String>要调用parseAs(String.class).

但是,您execute没有Class参数。因此,它不知道调用它的特化是什么,因此无法将该数据传递给parseAs.

解决方案是在调用链中添加一个Class<T>参数并平底船到下一个级别,其中具体类型(希望)是已知的:

public <T> execute(Class<T> klass, HttpRequest request) {
   ...
   request.execute().parseAs(klass);
}
于 2011-11-04T04:56:55.517 回答