Sichere Verbindung

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;
};