【问题标题】:Max name length of variable or method in JavaJava中变量或方法的最大名称长度
【发布时间】:2010-10-16 07:22:38
【问题描述】:

Java 中的类/方法/变量名称是否有最大长度? JLS似乎没有提到这一点。我知道从代码可读性和可维护性的角度来看,很长的名称无论如何都是有问题的,但是出于好奇,存在一个限制(我猜类名可能会受到文件系统最大文件名限制的限制)。

【问题讨论】:

    标签: java naming specifications name-length


    【解决方案1】:

    如果我没记错的话,限制不是语言本身,而是类文件格式,它将名称限制为 64k,因此对于所有实际意图和目的而言,标识符长度不是问题。 具体来说,这是池中常量字符串的定义,似乎暗示最大长度为16位:

    CONSTANT_Utf8_info {
        u1 tag;
        u2 length;
        u1 bytes[length];
    }
    

    类名可能是文件系统的更多问题,我同意,我不确定当前支持什么。

    【讨论】:

    • 不,因为问题是关于 Java 语言,而不是该语言的编译器的某些实现,即使该编译器恰好是参考实现。
    【解决方案2】:

    JLS: An identifier is an unlimited-length sequence of Java letters and Java digits, the first of which must be a Java letter.

    还发现了类似的问题(虽然它没有出现在我最初的搜索中,或者当我输入奇怪的问题标题时):Maximum Method Name Length

    【讨论】:

    • 那是针对语言的,但是类文件格式更严格。
    • 考虑到该语言是为类文件编译的,这实际上是相当令人惊讶的......
    • 是的,我想知道如果你真的尝试创建一个可笑的长变量名会发生什么
    • Main.java:1: 字符串“aaaaaaaaaaaaaaaaaaaa...”的 UTF8 表示对于常量池来说太长了
    【解决方案3】:

    如果你超过了 VM 对方法名称施加的大小限制,那么你会得到一个编译器错误(至少对于我正在使用的 javac 版本):

    Main.java:1:字符串“aaaaaaaaaaaaaaaaaaaa...”的 UTF8 表示 对于常量池来说太长了

    【讨论】:

      猜你喜欢
      • 2010-09-30
      • 2010-12-21
      • 2011-12-17
      • 1970-01-01
      • 1970-01-01
      • 2017-05-25
      • 2014-07-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多