java - Java Array 类名的公式是什么?
问题描述
我需要在 Java 中创建数组的类名。我注意到当使用反射查看类名时,数组具有某种模式:
例如对于 com.foo.Thing 数组的数组
[[Lcom.foo.Thing;
用于创建此类名称的公式是什么?我认为除“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
。
它适用于机器而不是人类;它很容易解析(您只需前进,无需向前看)。
这不是事物的“类名”;此构造的常用名称是“vm name”。请注意,泛型只是从这些中消失;的虚拟机名称List<String>
是Ljava/util/List;
。这就是为什么如果删除所有泛型,这两个方法最终具有相同的名称、参数类型和返回类型,则不能覆盖方法的原因。
推荐阅读
- c# - 如何从我的 WPF 中的任何应用程序访问突出显示/选定的文本?
- can-bus - 响应“50”仅对诊断请求“10 02”切换到编程会话意味着什么?
- forms - 无法设置提交按钮
- spring - HibernateException:使用 DefaultSchemaNameResolver 需要 Dialect 提供正确的 SQL 语句/命令
- php - 存储时关系上的 Laravel 5.0 sync() 不起作用
- python - 如何在 python/selenium 中切换 iframe 工作?
- c - 用于使用指向结构的指针循环结构成员
- php - 每次出现用不同的值替换相同的字符串
- r - 如何停止 ggrepel 标签在 R/ggplot2 中的 gganimate 帧之间移动?
- python - 我在 Python 中遇到了这个错误,EnvironmentNotWritable 错误