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

Java 21泛型兼容性异常排查及官方Bug反馈

Java 21泛型兼容性问题导致Jdbi无法识别泛型类型的解决方法

问题现象

  • 升级至Java 21后,使用Jdbi进行数据库访问时出现泛型类型无法识别的异常
  • 调试对比Java 17与Java 21的差异:当type为接口时,type instanceof Class判断在Java 17中返回false,Java 21中返回true
  • Jdbi依赖的Geantyref库中,GenericTypeReflector.getTypeParameter(..)方法在Java 17中能正常返回泛型类型,Java 21中返回null

根源分析

问题核心在于Java 21中record类的默认构造函数会丢失泛型参数信息。例如定义如下record:

record Person(Optional<String> name, Optional<Integer> age) {}

其默认构造函数的泛型<String>和<Integer>元数据丢失,导致Jdbi无法正确解析泛型类型,进而引发依赖库的方法返回异常。

解决方案

为record类添加带@JdbiConstructor注解的显式规范构造函数,手动保留泛型信息,示例代码如下:

record Person(Optional<String> name, Optional<Integer> age) {
    @JdbiConstructor
    Person {
        // 构造函数体可留空,仅用于保留泛型元数据
    }
}

Bug追踪

该兼容性问题已提交至OpenJDK官方Bug报告,分配编号为JDK-8320575

内容的提问来源于stack exchange,提问作者Joost den Boer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 01:44:55