私は次の方法を持っています:
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のメソッドです。
私は次の方法を持っています:
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のメソッドです。
これらのパラメーターを使用することはできません。
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);
}