2016-07-12 23 views
0

Ich nenne meine Konstanten, die jedochNaming Convention für Uninitialized Konstanten Java

static final wie ALL_UPPER_CASE sind, manchmal müssen Sie ein Feld als eine Konstante verwenden, aber es als final nicht definieren kann, weil es später initialisiert werden muss.

Zum Beispiel:

public class ExampleClass { 
    public static final int MAX_LENGTH = 100; 
    public static int constantValue; 

    public ExampleClass() { 
      // ... 
    } 

    private static void init(boolean condition) { 
      if (condition) { 
      constantValue = 42; 
      } else { 
      constantValue = 1; 
      } 
    } 
} 

Frage: Gibt es eine Art Konvention für diese zu benennen? Wie würdest du es machen oder gehen?

Ich mag nur Sachen wissen; das ist alles!

+0

Und diese dynamische Variable ist auch "public"? –

+0

@KevinWallis kann es in seiner Klasse oder außerhalb initialisiert werden –

+0

Der Wert dieser statischen Konstante soll durch eine nicht statische Funktion initialisiert werden? – FredK

Antwort

1

Technisch ist constantValue keine Konstante. Es ist lediglich ein statisches Feld, das sich nach der Initialisierung nicht ändert. Ich würde bei den Sun-Namenskonventionen bleiben und den Namen camelCase behalten. jedoch in dem Fall, dass Sie gegeben haben, wenn ich wollte unbedingt zeigen, dass dies eine Konstante ist, würde ich eine Enum erstellen:

public enum ExampleEnum { 

    TRUE_CONDITION(42), FALSE_CONDITION(1); 

    private final int value; 

    private ExampleEnum(int value) { 
     this.value = value; 
    } 

    public int getValue() { 
     return value; 
    } 

} 

Dann ExampleClass würde:

public class ExampleClass { 
    public static final int MAX_LENGTH = 100; 
    private static ExampleEnum myEnum; 

    private static void init(boolean condition) { 
     if (condition) { 
      myEnum = ExampleEnum.TRUE_CONDITION; 
     } else { 
      myEnum = ExampleEnum.FALSE_CONDITION; 
     } 
    } 

    public static int getConstantValue() { 
     return myEnum.getValue(); 
    } 

} 

Auf diese Weise, Sie haben das Gefühl, mit Konstanten zu arbeiten, und Sie brechen die Kapselung nicht auf.

+0

vielleicht kann der 'if (condition)' - Code aus Enumeration in eine eigene Methode verschoben werden? –

+0

Arthurs Beispiel ist ein besserer Weg, das Beispiel von rz3r0 zu schreiben, aber ich denke, der Satz "wenn ich unbedingt zeigen wollte, dass dies eine Konstante ist" ist nicht korrekt. In dieser Lösung sehe ich, dass die Variable "condition" wohl bestimmte Werte annehmen kann (durch die enum), aber sie ist eine Variable, keine Konstante. – Aris2World

+0

Wahr genug. Ich sollte den Satz so umformulieren: Wenn ich unbedingt zeigen wollte, dass der Wert sehr spezifische Werte annehmen kann ... " –