Java 数组 class 名称的公式是什么?
What is the formulation for Java Array class names?
我需要在 Java 中创建数组的 class 名称。我注意到在使用反射查看 class 名称时,数组具有特定模式:
例如对于数组的数组 com.foo.Thing
[[Lcom.foo.Thing;
创建这个 class 名称的公式是什么?我认为 'L' 之外的其他字母表示不同的意思。是否有图书馆对此有帮助?
每个基元一个字母,数组一个符号,引用一个字母:
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
.
它适用于机器而不是人类;很容易解析(你只是向前走,不需要向前看)。
这是不是一个东西的'class name';该构造的通常名称是 'vm name'。请注意,泛型只是从这些中消失了; List<String>
的虚拟机名称是 Ljava/util/List;
。这就是为什么如果两个方法以相同的名称、参数类型和 return 类型结束,如果您删除所有泛型,则不能覆盖方法。
我需要在 Java 中创建数组的 class 名称。我注意到在使用反射查看 class 名称时,数组具有特定模式:
例如对于数组的数组 com.foo.Thing
[[Lcom.foo.Thing;
创建这个 class 名称的公式是什么?我认为 'L' 之外的其他字母表示不同的意思。是否有图书馆对此有帮助?
每个基元一个字母,数组一个符号,引用一个字母:
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
.
它适用于机器而不是人类;很容易解析(你只是向前走,不需要向前看)。
这是不是一个东西的'class name';该构造的通常名称是 'vm name'。请注意,泛型只是从这些中消失了; List<String>
的虚拟机名称是 Ljava/util/List;
。这就是为什么如果两个方法以相同的名称、参数类型和 return 类型结束,如果您删除所有泛型,则不能覆盖方法。