我有以下方法:
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);
}