Java中如何通过.class获取原始类类型并优化泛型API避免强制转换
优化泛型API请求类,避免强制类型转换
当前实现中,每次重写onSuccess方法都需要手动强制转换响应对象类型,我们可以通过将MyRequest改造为泛型类来解决这个问题,让onSuccess直接接收指定类型的响应对象,完全省去强制转换步骤。
修改后的MyRequest泛型类
public class MyRequest<T> { private int method; private String url; private Class<T> responseClass; private @Setter JSONObject params; public MyRequest(int method, String url, Class<T> responseClass){ this.method = method; this.url = url; this.responseClass = responseClass; } public void executeRequest(){ new HttpJsonRequest(method, url, params) { @Override public void handleResponse(JSONObject response) { // Gson会直接返回T类型的对象,无需强制转换 T responseObj = new Gson().fromJson(String.valueOf(response), responseClass); onSuccess(responseObj); } // 省略其他重写方法 } } // 这里的参数直接定义为泛型T public void onSuccess(T response){} // 省略其他方法 }
改造子类ExampleRequest
子类需要指定泛型类型,这里就是MyResponse:
public class ExampleRequest extends MyRequest<MyResponse> { public ExampleRequest(String exampleParam){ super(Request.Method.POST, "/example", MyResponse.class); JSONObject params = new JSONObject(); params.put("exampleParam", exampleParam); setParams(params); executeRequest(); } }
使用示例(无需强制转换)
现在重写onSuccess时,直接拿到MyResponse类型的对象,不用再强转:
new ExampleRequest("exampleParamValue"){ @Override public void onSuccess(MyResponse response){ String statusCode = response.getStatusCode(); // 直接处理业务逻辑 } }
核心改动说明
- 将
MyRequest定义为泛型类MyRequest<T>,用T表示响应对象的类型 - 把
responseClass的类型从Class改为Class<T>,确保类型匹配 onSuccess方法的参数类型替换为T,让子类重写时直接获得对应类型的对象- Gson反序列化时,会根据
Class<T>直接生成指定类型的对象,类型安全且无需手动转换
内容的提问来源于stack exchange,提问作者nick_j_white
相关产品推荐
相关产品推荐

