safe_union
in HIDL steht für einen explizit getaggten Union-Typ.
Das ist mit einem union
vergleichbar, mit der Ausnahme, dass safe_union
den zugrunde liegenden Typ im Blick behält und mit Java kompatibel ist. Die
Der Typ „safe_union
“ ist in Android 10 verfügbar
und höher für neue und aktualisierte Geräte.
Syntax
Ein safe_union
wird in HIDL genau wie
union
oder struct
.
safe_union MySafeUnion { TypeA a; TypeB b; ... };
Nutzung
Bei der Laufzeit hat ein safe_union
immer nur einen Typ. Standardmäßig ist es
den ersten Typ in der Vereinigung. Im obigen Beispiel ist MySafeUnion
standardmäßig TypeA
.
hidl-gen
generiert eine benutzerdefinierte Klasse oder Struktur für ein
safe_union
in C++ und Java. Dieser Kurs umfasst Folgendes:
Diskriminator für jedes Mitglied (in hidl_discriminator
), eine Methode,
den aktuellen Diskriminator (getDiscriminator
), Setter und
für jedes Mitglied zu generieren. Jeder Setter und Getter wird genau wie sein Mitglied benannt.
Der Getter für TypeA a
heißt beispielsweise „a“ und
gibt etwas von TypeA
zurück. Der entsprechende Setter wird ebenfalls „a“ genannt und nimmt einen Parameter vom Typ TypeA
an. Festlegen des Werts in
Ein safe_union
aktualisiert den Wert des Diskriminators als
zurückgegeben von getDiscriminator
. Wenn Sie auf einen Wert aus einem anderen Discriminator zugreifen, wird das Programm abgebrochen. Für
Instanz, wenn getDiscriminator
für eine Instanz von
MySafeUnion
gibt hidl_discriminator::b
zurück, dann
a
bricht das Programm ab.
Monostate
Ein safe_union
hat immer einen Wert, aber wenn dieser nicht verwendet werden soll,
einen Wert haben, verwenden Sie android.hidl.safe_union@1.0::Monostate
als
. Die folgende Union kann beispielsweise noinit
(leer) oder foo
sein:
import android.hidl.safe_union@1.0::Monostate; safe_union OptionalFoo { Monostate noinit; Foo foo; };