2009-03-30 19 views
36

¿Existe una longitud máxima para los nombres de clase/método/variable en Java? el JLS no parece mencionar eso. Sé que los nombres muy largos son problemáticos de todos modos desde la legibilidad del código y la perspectiva de mantenimiento, pero solo por curiosidad hay una limitación (supongo que los nombres de las clases podrían estar limitados por la limitación máxima del nombre de archivo del sistema de archivos).Longitud máxima del nombre de la variable o método en Java

Respuesta

18

Lo sentimos, en realidad encontrado la respuesta en el JLS: http://java.sun.com/docs/books/jls/third_edition/html/lexical.html#40625 parece que son los nombres de identificador de longitud ilimitada.

También encontrado pregunta similar (aunque no apareció en mi búsqueda inicial, o cuando he escrito el título de la pregunta que es raro): Maximum Method Name Length

+2

Eso es para el idioma, pero el formato del archivo de clase es más restrictivo. – Uri

+1

Lo cual es realmente bastante sorprendente, considerando que el lenguaje fue creado para compilar para los archivos de clase ... – Uri

+1

cierto, me pregunto qué pasaría si realmente intentas crear un nombre de variable ridículamente largo – talg

31

Si no me equivoco, el límite no está en el idioma en sí, sino en el formato classfile, que limita los nombres a 64k, así que para todos los intentos prácticos la longitud del identificador no es un problema. En concreto, esta es la definición de una cadena constante en la piscina, que parece implicar la longitud máxima es de 16 bits:

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

Los nombres de clase pueden ser más de un problema para los sistemas de archivos, estoy de acuerdo, yo No estoy seguro de lo que actualmente es compatible.

+3

Esta debería ser la respuesta aceptada – Henry

7

Si excede el límite de tamaño impuesto por la máquina virtual para el método nombres, entonces obtendrá un error de compilación (al menos con la versión de javac estoy usando):

Main.java:1: representación UTF8 de cadena "aaaaaaaaaaaaaaaaaaaa ..." es demasiado larga para el conjunto de constantes

Cuestiones relacionadas