我有以下方法:
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 客户端库的方法。
我有以下方法:
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 客户端库的方法。
您不能使用这些参数。
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);
}