Bitte beachten Sie den Link unten, da eine detaillierte Person ihn bereits geschrieben hat. Flagverwaltung durch Bitoperation Die Verwaltung von Spielflaggen ist effizient und einfach mit Bit-Arithmetik
Ich möchte reden.
int
//Definition.
//Sie können es frei schreiben, aber wenn Sie es durch Verschieben schreiben, können Sie den als nächstes zu definierenden Wert auf einen Blick sehen.
final static int COM_LOLI = 1 << 0;
final static int COM_MOM = 1 << 1;
final static int COM_SIS = 1 << 2;
/**
* next flag:0x0008
* <p>
*Wie schreibe ich Kommentare, die ich im Android Framework gesehen habe.
*Wenn Sie den als nächstes zu definierenden Wert so schreiben, sieht er gut aus.
*/
//Erstellen.
int flags = COM_LOLI | COM_SIS;
//Flagge.
flags |= COM_MOM;
//Fahne runter.
flags &= ~COM_SIS;
//Überprüfen Sie die Flagge.
boolean isOn = (flags & COM_LOLI) != 0;
//Mindestens 101010 bei der Ausgabe von Protokollen...Im Format von.
Integer.toBinaryString(flags);
/**
*Das Erstellen einer Methode für die Protokollausgabe ist schwierig zu verwalten.
*/
static String decodeFlags(final int flags) {
StringBuilder builder = new StringBuilder();
if ((flags & COM_LOLI) != 0) {
builder.append("LOLI").append(" ");
}
if ((flags & COM_MOM) != 0) {
builder.append("MOM").append(" ");
}
if ((flags & COM_SIS) != 0) {
builder.append("SIS").append(" ");
}
return builder.toString();
}
BitSet
//Es gibt auch einen Ersatz für BitSet.
BitSet bitSet = new BitSet();
//Flagge.
bitSet.set(2);
//Fahne runter.
bitSet.clear(1);
//Überprüfen Sie die Flagge.
boolean isOn = bitSet.get(3);
//Dies ist jedoch eine Klasse, die verwendet wird, wenn Bitoperationen ernsthaft ausgeführt werden
//Es ist etwas schwierig, es als Flagge zu verwenden.
//Ich war froh, wenn es toInteger oder toLong gab
//Dies kann daran liegen, dass das Bitarray mit variabler Länge, das der Zweck der Klasse ist, nicht garantiert werden kann..
EnumSet
/**
*Definieren Sie zuerst die Aufzählung.
*/
enum Complex {
LOLI("Woooooooooooo"),
MOM("Mutter!"),
SIS("Es sind 12 Leute!");
public final String cry;
Complex(final String cry) {
this.cry = cry;
}
}
//Erstellen.
EnumSet<Complex> flags = EnumSet.of(Complex.LOLI, Complex.SIS);
//Flagge.
flags.add(Complex.MOM);
//Fahne runter.
flags.remove(Complex.SIS);
//Überprüfen Sie die Flagge.
boolean isOn = flags.contains(Complex.SIS);
//Schleife auf das ganze Element
for (Complex complex : Complex.values()) {
Log.d("allCry", complex.cry);
}
//Praktisch, um nur mit dem aktuellen Element zu schleifen oder zu drehen
for (Complex complex : flags) {
Log.d("limitedCry", complex.cry);
}
//Informationen zu "Was tun, wenn das Flag gesetzt ist?"
//Sehr praktisch, da es sofort herausgenommen werden kann
Sie sollten EnumSet verwenden, es sei denn, Sie haben einen Grund, es mit Geschwindigkeit, Speichereinsparung oder Int in die Datenbank ein- und auszuschalten. In Bezug auf die Geschwindigkeit wurde EnumSet auch in Effective Java geschrieben, dass es schnell genug war.
Auch der Typ, der die Konstante des int-Flags definiert hat, das den gleichen Zustand in * verschiedenen Klassen * * in unterschiedlicher Basisnotation darstellt *, ** sir !! **
Recommended Posts