Java 泛型参数问题:‘ResponseData.this‘ cannot be referenced from a static contex

问题与处理策略

问题描述
@Data
@AllArgsConstructor
@NoArgsConstructor
public class ResponseData<T> {
    private Integer code;
    private String msg;
    private T data;

    public static final int CODE_SUCCESS = 2001;
    public static final int CODE_FAIL = 3001;

    public static ResponseData<T> success(String msg, T data) {
        return new ResponseData<>(CODE_SUCCESS, msg, data);
    }
}
  • 上述代码,会报如下错误
'ResponseData.this' cannot be referenced from a static contex
# 翻译

ResponseData.this 不能从静态上下文中引用
问题原因
  1. 在 Java 中,在类上定义了泛型参数(例如,ResponseData),这个类型参数 T 是实例级别的

  2. 静态方法不能直接使用类级别的泛型参数

  3. 在上例中,方法 public static ResponseData success(String msg, T data) 中的 是方法级别的类型参数,与类级别的 T 是独立的,虽然名字相同,但作用域不同

  4. 静态方法需要独立声明自己的泛型参数

处理策略
  1. 为静态方法独立声明自己的泛型参数
public static <T> ResponseData<T> success(String msg, T data) {
    return new ResponseData<>(CODE_SUCCESS, msg, data);
}
  1. 或者,为了更加清晰,可以为静态方法独立声明自己的泛型参数为 (或其他)
public static <R> ResponseData<R> success(String msg, R data) {
    return new ResponseData<>(CODE_SUCCESS, msg, data);
}

你可能感兴趣的:(后端,-,问题清单,java,开发语言,java-ee,后端,后端开发,intellij-idea,intellij,idea)