首页 > 解决方案 > Java Array 类名的公式是什么?

问题描述

我需要在 Java 中创建数组的类名。我注意到当使用反射查看类名时,数组具有某种模式:

例如对于 com.foo.Thing 数组的数组

[[Lcom.foo.Thing;

用于创建此类名称的公式是什么?我认为除“L”之外的其他字母表示不同的意思。有没有图书馆可以帮助解决这个问题?

标签: javajvm

解决方案


每个基元一个字母,数组一个符号,参考一个字母:

  • I= 整数
  • J= 长
  • D= 双倍
  • F= 浮动
  • Z= 布尔值
  • C= 字符
  • B= 字节
  • S= 短
  • Lcom/foo/Thing;= 参考 'com.foo.Thing'
  • [= 下一个数组(所以,[[I是一个int[][])。

这是用于类型签名的 VM 语言。例如,签名:

public boolean[] foo(String[] args, int count) { ... }

是:([Ljava/lang/String;I)[Z

它适用于机器而不是人类;它很容易解析(您只需前进,无需向前看)。

不是事物的“类名”;此构造的常用名称是“vm name”。请注意,泛型只是从这些中消失;的虚拟机名称List<String>Ljava/util/List;。这就是为什么如果删除所有泛型,这两个方法最终具有相同的名称、参数类型和返回类型,则不能覆盖方法的原因。


推荐阅读