10 Stimmen

Definieren einer Karte als Konstante in Java

Für meine Android-App muss ich einige Schlüssel in einer einzigen Konstante definieren, und ich denke, der beste Weg, es zu tun ist mit einer Karte. Aber nicht sicher, ob das ist wirklich der Weg zu gehen, und wie man es richtig zu tun. Wie ich bin Targeting Android, ein Bundle kann auch eine Option sein.

Ich habe eine Liste von Schlüsseln wie:
"h" = "http"
"f" = "ftp"

Im Grunde soll das Programm einen QR-Code lesen (damit der Code nicht zu groß wird, verwende ich superkurze Schlüssel), diese Schlüssel erhalten und sie in etwas Nützliches übersetzen, in meinem Fall ein Protokoll.

Ich versuche, eine Konstante namens KEY_PROTOCOLS zu definieren, ich denke, dies sollte eine Map sein, so dass ich später etwas wie KEY_PROTOCOLS.get("f") aufrufen kann, um das Protokoll zu erhalten, das zum Schlüssel "f" gehört.

Andere Klassen sollten diese Konstante ebenfalls importieren und verwenden können. Diese Karte muss also gleich in die Klasse eingefügt werden.

Wie kann ich das tun?

26voto

JB Nizet Punkte 654813

Wenn die Konstante von mehreren Klassen gemeinsam genutzt wird und wenn Sie sicherstellen wollen, dass diese Karte nicht durch einen Code gelöscht oder verändert wird, sollten Sie sie unveränderbar machen:

public static final Map<String, String> KEY_PROTOCOLS;

static {
    Map<String, String> map = new HashMap<String, String>();
    map.put("f", "ftp");
    // ...
    KEY_PROTOCOLS = Collections.unmodifiableMap(map);
}

3voto

Blundell Punkte 72729

Etwa so:

  private static final Map<String, String> KEY_PROTOCOLS = new HashMap<String, String>();
 static{
    KEY_PROTOCOLS.put("f", "ftp");
    // More

}

Statische Initialisierer:

http://www.glenmccl.com/tip_003.htm

0voto

Andrew Punkte 13538

Das würde funktionieren.

static Map<String, String> map = new HashMap<String, String>();

static {
   map.add("ftp", "ftp");
   ...
}

0voto

diyism Punkte 11786

Auf Android:

@SuppressWarnings("unchecked")
Pair<String,String>[] pre_ips=new Pair[]{new Pair<String,String>("173.194", "0"), new Pair<String,String>("74.125", "96")};
String ip_1_2,ip_3;
for (Pair<String,String> pre_ip:pre_ips)
    {ip_1_2=pre_ip.first;
     ip_3=pre_ip.second;
    }

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X