You need to enable JavaScript to run this app. Java中如何将类全限定名转换为JNI等效表示形式
优惠活动
大模型
产品
解决方案
定价
更多

Java中如何将类全限定名转换为JNI等效表示形式

Java类全限定名转JNI等效格式的实现

不需要手动维护映射规则或者写复杂的字符串替换逻辑,根据你使用的JDK版本直接选对应方案即可:

可直接调用的方法

  • JDK 12 及以上版本:直接调用Class实例的descriptorString()方法,即可得到完全符合JNI要求的类描述符。
    这个方法是Java类库内置的、专门用来生成JVM内部使用的类描述符的接口,输出和JNI规范要求的格式完全对齐:对a.b.c.MyExample对应的Class对象,调用descriptorString()会直接返回La/b/c/MyExample;,不需要额外做字符串处理。
  • JDK 12 之前的旧版本:类库没有提供一步生成的内置方法,可根据实际场景选择实现:
    • 如果只是转换普通的、没有泛型的引用类型类,逻辑非常简单,基于现有getName()的返回值处理即可:
      String jniName = "L" + obj.getClass().getName().replace('.', '/') + ";";
      
    • 如果需要兼容数组类型、原始类型、嵌套类等复杂场景,直接用成熟JNI工具库里内置的类名转换静态方法即可,不需要自己处理边界情况。

格式差异说明

要注意两个API的输出区别:

  • Class.getName()返回的是Java开发者熟悉的全限定类名,用点分隔包路径,没有前后缀,比如a.b.c.MyExample
  • descriptorString()返回的是JVM规范定义的类描述符格式,也就是JNI接口识别的格式:用斜杠分隔包路径,引用类型类前面加L,后面加分号,比如La/b/c/MyExample;

内容的提问来源于stack exchange,提问作者user7698505

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.02 05:54:10