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 client libraryのメソッドです。

4

1 に答える 1

5

これらのパラメーターを使用することはできません。

Java のジェネリックは、型消去と呼ばれるものを使用します。基本的に、これらTの s はすべて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 に答える