Java Array类名的表述是什么?

问题描述 投票:0回答:1

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

例如,用于com.foo.Thing的数组的数组

[[Lcom.foo.Thing;

用于创建此类名称的公式是什么?我认为除“ L”以外的其他字母表示不同的意思。有图书馆对此提供帮助吗?

java jvm
1个回答
0
投票

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

  • I = int
  • J =长
  • D =两倍
  • F =浮动
  • Z =布尔值
  • C =字符
  • B =字节
  • S =短
  • Lcom/foo/Thing; =引用'com.foo.Thing'
  • [[ =下一步的数组(因此,[[Iint[][])。]]
  • 这是VM代表类型签名。例如,签名:

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

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

它是针对机器而不是人类;它很容易解析(您只需前进即可,无需提前查看)。

这是not

事物的“类名”;此结构的通常名称是“ vm name”。注意,泛型只是从这些中消失了。 List<String>的VM名称为Ljava/util/List;。这就是为什么如果两个方法都以相同的名称,参数类型和返回类型(如果您删除所有泛型)结尾时不能覆盖方法的原因。
© www.soinside.com 2019 - 2024. All rights reserved.