泛型在接口回调中用于明确数据类型、避免强制转换、增强编译检查和可读性;通过泛型接口、泛型方法及函数式接口实现类型安全回调,但受类型擦除限制需传Class参数辅助运行时类型操作。

泛型在接口回调中主要用来明确回调数据的类型,避免强制转换、提升编译期检查能力,并让调用方清楚“传什么、收什么”。它不是为了运行时动态改变行为,而是让接口契约更严谨、可读性更强。
回调接口本身声明泛型参数
把数据类型作为接口的类型参数,使整个回调逻辑绑定具体类型。比如网络请求成功后返回的数据结构不确定,但每次使用场景是固定的:
- 定义泛型回调接口:public interface RequestCallback
{ void onSuccess(T data); void onError(String msg); } - 实现时指定类型:RequestCallback
userCallback = new RequestCallback () { ... }; - 调用方无需转型:onSuccess(user) → user 就是 User 类型,直接点属性、调方法
泛型方法配合回调参数传递类型信息
当回调逻辑需要适配多种类型,又不想为每种类型写一个接口时,可用泛型方法封装通用处理流程:
将后端 Java 接口文档转换为前端 TypeScript 类型定义(interface / type)。输入:飞书文档、Spring Boot 接口文档、Swagger/OpenAPI、手写 API 文档等。输出:包含请求参数与响应结果的 .md 文件,含完整 JSDoc 注释。触发关键词:Java 转 TS、接口转换、生成前端类型、接口文档转 TypeScript、DTO/VO/BO 转 interface、后端文档转前端类型、生成接口类型、类型定义生成。
- 例如统一处理 JSON 解析后的回调:public
void executeRequest(String url, Class type, RequestCallback callback) - 内部解析时用 gson.fromJson(json, type) 得到 T 实例,再传给 callback.onSuccess(result)
- 调用时类型自动推断:executeRequest("/user/1", User.class, userCb) → 编译器知道 callback 是 RequestCallback
结合函数式接口与泛型提升简洁性
Java 8+ 可用函数式接口(如 Consumer
- public void fetchData(Consumer
onSuccess, Consumer onError) - 调用:fetchData(data -> System.out.println("got: " + data), e -> e.printStackTrace())
- 若需带泛型结果,可封装为:public
void fetchAs(Class cls, Consumer success)
注意类型擦除带来的限制
Java 泛型在运行时被擦除,所以不能在回调内部直接用 if (data instanceof T) 或 new T()。需要额外传入 Class
- 错误写法:T instance = (T) jsonParser.parse(json);(可能 ClassCastException)
- 正确做法:T instance = jsonParser.parse(json, type);,其中 type 是调用方传入的 User.class

















