我需要在Java中创建数组的类名。我注意到在使用反射来查看类名时,数组具有某种模式:
例如,用于com.foo.Thing的数组的数组
[[Lcom.foo.Thing;
用于创建此类名称的公式是什么?我认为除“ L”以外的其他字母表示不同的意思。有图书馆对此提供帮助吗?
每个基元一个字母,一个符号代表数组,一个字母代表参考:
I
= intJ
=长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
。
它是针对机器而不是人类;它很容易解析(您只需前进即可,无需提前查看)。
这是not
事物的“类名”;此结构的通常名称是“ vm name”。注意,泛型只是从这些中消失了。List<String>
的VM名称为Ljava/util/List;
。这就是为什么如果两个方法都以相同的名称,参数类型和返回类型(如果您删除所有泛型)结尾时不能覆盖方法的原因。