我正在尝试构建一个泛型方法,该方法将调用任何API特定的端点,每个端点都返回自己的对象类型。
private <T> T callApi(String endpoint) {
T responseSuccessObject = null;
String responseBody = ...
responseSuccessObject = (T) gson.fromJson(responseBody, responseSuccessObject.getClass());
}
以上操作不起作用(失败,出现空指针异常)
也试过这个:
private <T> T callApi(String endpoint) {
T responseSuccessObject = (T) new Object();
String responseBody = ...
responseSuccessObject = (T) gson.fromJson(responseBody, responseSuccessObject.getClass());
}
失败的原因是:
com.xx.AuthResponseModel is in unnamed module of loader org.apache.felix.framework.BundleWiringImpl$BundleClassLoader @58bd8c78)
我看到了一个可能的解决方案,即传入所需类的一个伪对象,但这不是一个理想的选择,因为它需要在一长串调用中添加和传递类型参数。
不知道这是怎么回事。
private <T> T callApi(Class<T> type, String endpoint) {
T responseSuccessObject = null;
String responseBody = ...
responseSuccessObject = (T) gson.fromJson(responseBody, ?);
}
1条答案
按热度按时间83qze16e1#
你要找的只是
如果有一个解决方案可以避免沿着
Class
对象,Gson早就使用它了。没有。要了解更多信息,请研究type erasure。