2013-10-04 12 views
13

ich dieses kleine Häppchen zu schlagen, während die Java-Code Conventions Surfen im Internet:Java „ANSI Konstanten“

Die Namen von Variablen deklariert Klassenkonstanten und von ANSI Konstanten sollten alle Großbuchstaben mit Worten durch Unterstreichungen („_“ getrennt sein). (ANSI Konstanten sollte vermieden werden, für eine einfache Fehlersuche.)

(Von here.)

Was ist dieser "ANSI Konstanten" dieses Dokument spricht von? Und wie machen sie das Debugging schwieriger?

Der Text klingt so, als ob es eine Dichotomie zwischen "Variablen deklarierten Klassenkonstanten" (die ich als gewöhnliche static final Variablen interpretiere) und diesen "ANSI-Konstanten" gibt, aber mir ist keine Möglichkeit bekannt, Konstanten zu deklarieren in Java anders als sie static final Variablen zu machen.

+1

das ist eine interessante Frage. Ich bin neugierig auf deine Gedanken zu meiner Antwort. Außerdem arbeite ich zufällig bei Oracle und ich könnte prüfen, ob einer der ursprünglichen Autoren noch hier ist, wenn Sie nach einer autoritativeren Antwort suchen. – aioobe

Antwort

5

Die einzigen Referenzen im Internet über das, was ANSI-Konstanten sind, sind in Foren, in denen Leute, die die Namenskonventionen gelesen haben, die gleiche Frage stellen. Es scheint, dass der Begriff von der Person erfunden wurde, die das Dokument geschrieben hat, und Sie müssten sie fragen, was sie bedeuteten.

ANSI ist ein nationales Standardisierungsgremium in den USA, das zum Beispiel für den ASCII-Zeichensatzstandard und den ANSI C-Sprachstandard bekannt ist. ANSI ist auch, was Microsoft Windows die regionale ASCII-basierte Standardzeichencodierung nennt. Es ist möglich, dass der Autor sich auf Zeichenfolgenliterale bezog.

+0

* "Es ist möglich, dass sich der Autor auf String-Literale bezog." * - Nicht wahrscheinlich. Java-String-Literale sind nicht ASCII, sie sind UTF-16. – aioobe

0

Ich würde erwarten, dass es etwas mit statischen Initialisierungen zu tun oder nicht kompilieren Zeitkonstanten, aber ich weiß wirklich nicht, (ich in den Code-Konventionen für diesen Begriff wurde googeln und das brachte mich hier :)

public class TestClass 
{ 
    final static Object ANSI_CONSTANT; 
    static { ANSI_CONSTANT = new Object(); 
} 
5

Sie werden höchstwahrscheinlich mit Bezug auf ANSI C Konstanten, defined as follows

In ANSI-C-Konstanten kann auf zwei Arten definiert werden: durch die # define-Anweisung und durch die Verwendung des Modifizierers const. Zum Beispiel die beiden folgenden Aussage äquivalent:

#define LENGTH 10  /* Length of the square in inches */ 

const int length = 10; /* Length of the square in inches */ 

Nun gibt es offensichtlich keine C Konstanten in Java, weil Java nicht C :-) ist (das ist nicht der seltsamste Teil der offiziellen Kodierungskonventionen, Aber ich schweife ab).

Warum also haben sie ANSI-Konstanten geschrieben? Dies ist höchstwahrscheinlich nur eine bequeme Methode, um auf finale Primitive und unveränderliche Objekte zu verweisen. Denken Sie daran, dass in C die Felder eines const struct nach der Initialisierung nicht aktualisiert werden können, und es gibt keinen entsprechenden Java-Ausdruck für eine solche "Konstante" (final erfasst den Begriff der Unveränderlichkeit nicht sehr gut).

+0

Danke für deine Antwort, aber es ist wirklich nur Spekulation; Ich hatte auf eine autoritativere Antwort gehofft. Auch scheint es mir ziemlich schwer zu sagen, dass jemand "C" als "ANSI" bezeichnen würde, aber wer weiß. :) – Dolda2000

+2

Richtig. Ich habe eine [ältere Version des Dokuments] (http://www.oracle.com/technetwork/java/codeconventions-150003) gefunden.pdf) welches (zufällig?) C-Code darin hat (direkt über dem ANSI-Konstanten-Teil). Also ich würde nicht sagen strecken zu C ist * das * weit :-) Aber ich bin auch neugierig darauf, und ich werde versuchen, die Autoren zu erreichen. Werde Dich auf dem Laufenden halten. – aioobe