【问题标题】:Is there restriction about Java package name length?Java 包名长度有限制吗?
【发布时间】:2014-04-28 13:23:09
【问题描述】:

Java 包名的名称长度有限制吗?

喜欢包com.abc.xxx.xxxx.xxxx

【问题讨论】:

标签: java


【解决方案1】:

在类文件中,由于完整的类名存储为(修改后的)UFT-8 序列,因此存在实际限制,该序列的最大长度为 65535 字节,因为长度存储为无符号短.

存储 Generic 类的签名可能需要更短的包名。如果您尝试多次创建一个将类型作为参数的方法,它将更加受限,因为签名将包含每个参数的限定类型名称和单个序列中的返回类型,但仍然限制为 65535总共 UTF-8 字节。

【讨论】:

  • 什么是“通用类”?它是一个通用类(不是专有名词)吗?是字面意思吗?或与generics in Java有关?或者是其他东西? (通过编辑您的答案来回应,而不是在 cmets 中。)
  • @PeterMortensen 当只有一种泛型类时,为什么需要澄清?或者您还知道哪些其他通用类?当你告诉我哪个方面令人困惑或误导时,我会改进答案。
【解决方案2】:

根据 Java 语言规范 (3.8):

“标识符是 Java 字母和 Java 数字的无限长度序列,其中第一个必须是 Java 字母。”

但是,正如@Holger 所指出的,JVM 规范对可以在类文件常量池中表示的字符串值设置了 2^16 - 1 的上限。 (参见 JVM 规范 4.4.7)

包名是完全限定类名的一部分,后者表示为类文件常量池条目。因此,实际的上限是完全限定类名的长度,而不仅仅是包名。

假设,如果有人要创建一个不使用标准类文件格式的 Java 实现,还有另一个限制……Java String 的长度,即 2^31 - 1 个字符。 (注意,String 的最大长度没有在 JLS 中指定。是 Java 类库和 javadocs 指定了这一点。)

然而,现实情况是这些实施限制是如此之大,以至于它们不应该带来实际问题。

【讨论】:

    猜你喜欢
    • 2010-11-05
    • 1970-01-01
    • 2015-10-22
    • 1970-01-01
    • 1970-01-01
    • 2011-01-17
    • 1970-01-01
    • 1970-01-01
    • 2015-03-21
    相关资源
    最近更新 更多