You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 10:36:59