safe_union
in HIDL steht für einen explizit getaggten Union-Typ.
Dies entspricht einem union
, mit dem Unterschied, dass in safe_union
des zugrunde liegenden Typs definiert 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
Zur Laufzeit ist ein safe_union
immer nur ein Typ. Standardmäßig ist es
den ersten Typ in der Vereinigung. Oben haben wir zum Beispiel
MySafeUnion
ist standardmäßig auf TypeA
gesetzt.
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 ist ebenfalls
heißen „eine“ und verwendet den Parameter TypeA
. Festlegen des Werts in
Ein safe_union
aktualisiert den Wert des Diskriminators als
zurückgegeben von getDiscriminator
. Zugriff auf einen Wert aus einem
Diskriminator, der nicht der aktuelle Diskriminator ist, bricht das Programm ab. Für
Instanz, wenn getDiscriminator
für eine Instanz von
MySafeUnion
gibt hidl_discriminator::b
zurück, dann
a
bricht das Programm ab.
Einfarbig
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
:
import android.hidl.safe_union@1.0::Monostate; safe_union OptionalFoo { Monostate noinit; Foo foo; };