2016-06-04 6 views
1
public final class Templates { 
    public static class NewDeviceDetailsConsts { 
     public static final String AAA = "aaaa"; 
     public static final String BBB = "bbbb"; 
     public static final String CCC = "cccc"; 
    } 
    } 

für die Verwendung von AAA, ich habe Templates.NewDeviceDetailsConsts.AAA zu schreiben und das ist eine lange Reihe 10-20 mal in jeder Klasse verwenden ich es verwenden.besserer Weg Felder statische Klasse zuzugreifen

Wird es effizient sein, es zu verwenden wie, Ich definiere ein Feld in Klassen Ich brauche es, Templates.NewDeviceDetailsConsts DeviceConst; und verwenden DeviceConst .___ in der Klasse. Ist es in Ordnung oder kann ich es besser als das tun.

+0

Nun, Sie immer eine statische Import aber an einem gewissen Punkt verwenden können, müssen Sie den vollständig klassifizierten Namen angeben müssen . – Tunaki

+1

Wie wäre es mit "enum" auf oberster Ebene? –

Antwort

1

würde ich enum ‚s für diesen Zweck verwendet werden:

public final class Templates { 
    public enum NewDeviceDetailsConsts { 
     AAA("aaaa"), BBB("bbbb"), CCC("cccc"); 

     private String value; 

     private NewDeviceDetailsConsts(String value) { 
      this.value = value; 
     } 

     public String getValue() { 
      return value; 
     } 
    } 
} 

Dann können Sie die Konstanten wie folgt:

NewDeviceDetailsConsts aaa = NewDeviceDetailsConsts.AAA; 

Sie können auch mit AAA, BBB , ... ohne Parameter, wenn Sie wie folgt benötigen:

public final class Templates { 
    public enum NewDeviceDetailsConsts { 
     AAAA, BBBB, CCCC; 
    } 
} 

Und schließlich sollten Sie sie nicht innerhalb einer Klasse definieren. Ein ENUM kann auch eine Top-Level-Klasse wie folgt, es sei denn sie sind Teil einer Klasse sein:

public enum NewDeviceDetailsConsts { 
    AAAA, BBBB, CCCC; 
} 
+0

Ich kam mit diesem 'Import statische Templates.NewDeviceDetailsConsts. *'. Ich werde das benutzen und die Consts direkt benutzen. Ist dieser Ansatz besser oder sollte ich mit enums gehen? – tarun14110

+0

Das Problem mit statischem Import ist, dass Sie den Namensraum Ihrer Klassen verschmutzen. Stellen Sie sich vor, Sie verwenden sie in vielen Klassen und lassen Sie uns annehmen, dass die Klassen mehr als ein paar Zeilen lang sind. Wenn Sie dann im Code auf eine Konstante "AAA" stoßen, sehen Sie nicht direkt, wo sie herkommt. Wenn Sie sie in der Klassenhierarchie verwenden, können sie Fehler verursachen, die Sie möglicherweise nicht leicht sehen. Für mich sehe ich keinen Grund, warum ich statische Konstanten anstelle von 'enums' verwenden muss. Enums sind auch sehr mächtig. – ujulu

+0

Wenn Sie noch weitere Informationen darüber suchen, welche Variante [hier] (http://stackoverflow.com/questions/9969690/whats-the-advantage-of-a-java-enum-versus-a-klasse) verwendet werden soll Mit Public-Static-Final-Field finden Sie einige sehr gute Erklärungen, warum Sie 'Enum's in Betracht ziehen sollten. Nicht nur die akzeptierte Antwort, sondern auch andere haben sehr gute Erklärungen. – ujulu

2

Es gibt ein paar Möglichkeiten, wie Sie dieses Problem lösen können.

  1. einen statischen Import erstellen:

    Wo Ihre Import-Anweisungen sind, diese import static path.to.Templates.NewDeviceDetailsConsts.AAA; hinzufügen. Dadurch können Sie Ihr AAA Objekt referenzieren, indem Sie einfach AAA eingeben.

    Leider müssen Sie diese Zeile am Anfang aller Klassen hinzufügen.

  2. Erstellen Sie einen Getter Ihre Templates Klasse.

    public static NewDeviceDetailsConsts getAAA(){ 
        return NewDeviceDetailsConsts.AAA; 
    } 
    

    Dann Templates.getAAA() verwenden, um das AAA Objekt zu erhalten.

  3. Speichern Sie einen Verweis auf das AAA Objekt in der Arbeitsklasse.

    private static NewDeviceDetailsConsts AAA = Templates.NewDeviceDetailsConsts.AAA; 
    
+0

Ich brauche alle Ausgaben von 'NewDeviceDetailsConsts', in etwa 10 Klassen, welche schlagen Sie vor? – tarun14110

+0

Sehen Sie, wie Sie die Objekte in mehreren Klassen referenzieren müssen, indem Sie die Getter in Ihrer Klasse 'Template' erstellen. Dies ermöglicht Ihnen, auf die Objekte zuzugreifen, egal in welcher Klasse Sie arbeiten. –

+0

Ich habe diese 'import static Templates.NewDeviceDetailsConsts. *' Entwickelt. Ich werde das benutzen und die Consts direkt benutzen. Ist dieser Ansatz besser oder sollte ich mit Gettern gehen? – tarun14110

Verwandte Themen