当前位置: 首页 > news >正文

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>),这个类型参数 T 是实例级别的

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

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

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

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

相关文章:

  • GoogleTest:简单示例及ASSERT/EXPECT说明
  • 【编译原理】第四章 习题
  • pandas读取Excel数据(.xlsx和.xls)到treeview
  • 传感器的精度,灵敏度等概念介绍
  • terraform实现本地加密与解密
  • vue3内置组件Suspense的使用
  • 在Linux中,KVM和Docker在Linux虚拟化中的区别是什么?
  • Nginx 核心功能02
  • WGCLOUD使用 - 如何监控RabbitMQ运行参数
  • Python10天冲刺-设计模型之策略模式
  • 机器学习经典算法:用决策树原理优化新能源汽车续航能力
  • 【Redis】String详细介绍及其应用场景
  • 深度学习系统学习系列【1】之基本知识
  • npm宿主依赖、宿主环境依赖(peerDependencies)(指由宿主环境提供的依赖)
  • Ubuntu20.04如何优雅的安装ROS 1(胎教级教程)
  • Ocelot与.NETcore7.0部署(基于腾讯云)
  • loads、dumps、jsonpath使用场景
  • 上位机知识篇---二进制操作
  • 科学养生,解锁健康生活密码
  • 【信息系统项目管理师-论文真题】2023下半年论文详解(包括解题思路和写作要点)
  • 全红婵/陈芋汐夺得跳水世界杯总决赛女子双人10米台冠军
  • 美国季度GDP时隔三年再现负增长,特朗普政府关税政策对美国经济负面影响或将持续
  • 长三角铁路今日预计发送旅客420万人次,有望创单日客发量新高
  • 美商界报告:全美超86万岗位依赖对华出口,关税将重创美国出口商
  • 国务院食安办:加强五一假期食品生产、销售、餐饮服务环节监管
  • 民生访谈|支持外贸企业拓内销,上海正抓紧制定便利措施