Hol*_*ger 10
在类文件中,由于全限定类名存储为(修改的)UFT-8序列,其最大长度为65535字节,因为长度存储为无符号短,因此存在实际限制.
存储Generic类的签名可能需要更短的包名称.如果您尝试创建一个多次将类型作为参数的方法,则会更加有限,因为签名将包含每个参数的限定类型名称和单个序列中的返回类型,但仍限制为65535 UTF-总共8个字节.
根据 Java 语言规范 ( 3.8 ):
“标识符是 Java 字母和 Java 数字的无限长度序列,其中第一个必须是 Java 字母。”
但是,正如@Holger 指出的那样,JVM 规范对可以在类文件常量池中表示的字符串值设置了 2^16 - 1 的上限。(参见 JVM 规范4.4.7)
包名是完全限定类名的一部分,后者表示为类文件常量池条目。因此,实际的上限是完全限定的类名的长度,而不仅仅是包名。
假设,如果有人要创建一个不使用标准类文件格式的 Java 实现,还有另一个限制...... Java 的长度String,即 2^31 - 1 个字符。(请注意,StringJLS 中未指定a 的最大长度。Java 类库和 javadocs 指定了这一点。)
然而,现实情况是,这些实施限制非常大,不应引起实际问题。
| 归档时间: |
|
| 查看次数: |
6730 次 |
| 最近记录: |