Incompatible types. Found: 'com.daqin.demo251001.reponse.AjaxResult<java.lang.Object>', required:'com.daqin.demo251001.reponse.AjaxResult<T>':58 Incompatible types. Found: 'com.daqin.demo251001.reponse.AjaxResult<java.lang.Object>', required:'com.daqin.demo251001.reponse.AjaxResult<T>':63这怎么办

## 问题分析

这是一个泛型类型不匹配的错误。错误信息显示返回的是 `AjaxResult<Object>` 类型,但期望的是 `AjaxResult<T>` 类型。

## 解决方案

需要在静态方法中正确使用泛型类型参数。以下是修正后的代码:

```java
package com.daqin.demo251001.reponse;

import com.daqin.demo251001.reponse.enums.ErrorEnum;
import lombok.Data;

/**
 * Ajax响应结果封装类
 * @param <T> 响应数据类型
 */
@Data
public class AjaxResult<T> {
    // 状态码
    private Integer code;
    // 提示信息
    private String msg;
    // 响应数据
    private T data;
    
    // 无参构造
    protected AjaxResult() {
    }
    
    public AjaxResult(T data) {
        this.code = ErrorEnum.SUCCESS.getCode();
        this.msg = ErrorEnum.SUCCESS.getMsg();
        this.data = data;
    }
    
    // 全参构造
    public AjaxResult(Integer code, String msg, T data) {
        this.code = code;
        this.msg = msg;
        this.data = data;
    }
    
    // 成功响应 - 无数据
    public static <T> AjaxResult<T> success() {
        return new AjaxResult<T>(ErrorEnum.SUCCESS.getCode(), ErrorEnum.SUCCESS.getMsg(), null);
    }
    
    // 成功响应 - 有数据
    public static <T> AjaxResult<T> success(T data) {
        return new AjaxResult<T>(data);
    }
    
    // 成功响应 - 自定义消息
    public static <T> AjaxResult<T> success(String msg, T data) {
        return new AjaxResult<T>(ErrorEnum.SUCCESS.getCode(), msg, data);
    }
    
    // 失败响应 - 使用错误枚举
    public static <T> AjaxResult<T> error(ErrorEnum errorEnum) {
        return new AjaxResult<T>(errorEnum.getCode(), errorEnum.getMsg(), null);
    }
    
    // 失败响应 - 自定义状态码和消息
    public static <T> AjaxResult<T> error(Integer code, String msg) {
        return new AjaxResult<T>(code, msg, null);
    }
    
    // 失败响应 - 自定义消息
    public static <T> AjaxResult<T> error(String msg) {
        return new AjaxResult<T>(ErrorEnum.ERROR.getCode(), msg, null);
    }
}
```


## 主要修改点

1. **在所有静态方法的返回类型中明确指定泛型**:将 `new AjaxResult<>(...)` 改为 `new AjaxResult<T>(...)`
2. **保持泛型一致性**:确保创建的 [AjaxResult]实例与方法声明的泛型类型 `T` 保持一致

这样修改后,泛型类型匹配问题就能解决了。

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐