2009-03-30 9 views
36

Gibt es eine maximale Länge für Klassen-/Methoden-/Variablennamen in Java? Die JLS scheint das nicht zu erwähnen. Ich weiß, dass sehr lange Namen aus der Lesbarkeit von Code und der Wartbarkeitsperspektive sowieso problematisch sind, aber gerade aus Neugier besteht eine Einschränkung (ich denke, Klassennamen können durch die maximale Dateinamenbeschränkung des Dateisystems begrenzt sein).Max Name Länge der Variablen oder Methode in Java

Antwort

18

Entschuldigung, tatsächlich gefunden die Antwort in der JLS: http://java.sun.com/docs/books/jls/third_edition/html/lexical.html#40625 Es scheint, dass Bezeichner Namen unbegrenzte Länge haben.

gefunden Auch ähnliche Frage (obwohl es nicht in meiner ersten Suche angezeigt hat, oder wenn ich getippt die Frage Titel, die seltsam ist): Maximum Method Name Length

+2

Das ist für die Sprache, aber das Klassendateiformat ist restriktiver. – Uri

+1

Das ist eigentlich ziemlich überraschend, wenn man bedenkt, dass die Sprache für die Klassendateien kompiliert werden sollte ... – Uri

+1

true, ich frage mich, was passiert, wenn Sie tatsächlich einen lächerlich langen Variablennamen erstellen – talg

31

Wenn ich mich nicht irre, ist das Limit nicht in der Sprache selbst, sondern im classfile-Format, das Namen auf 64k beschränkt, so dass für alle praktischen Absichten Bezeichner Länge kein Problem ist. Insbesondere ist dies die Definition einer konstanten Zeichenfolge im Pool, der die maximale Länge scheint zu implizieren, 16 Bit:

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

Klassennamen eher ein Problem sein kann für Dateisysteme, Ich bin damit einverstanden, ich Ich bin mir nicht sicher, was derzeit unterstützt wird.

+3

Dies sollte die akzeptierte Antwort sein – Henry

7

Wenn Sie die Größenbeschränkung für das Verfahren durch die VM auferlegt gehen Namen dann erhalten Sie einen Compiler-Fehler (zumindest mit der Version von javac ich verwende):

Main.java:1: UTF8 Darstellung für string „aaaaaaaaaaaaaaaaaaaa ...“ ist zu lang für die konstanten-Pool