安全工會

HIDL 中的 safe_union 代表明確標記的聯集類型。 這和 union 類似,但 safe_union 保留 而且與 Java 相容 safe_union 類型適用於 Android 10 。

語法

safe_union 在 HIDL 中的表示方式與 unionstruct

safe_union MySafeUnion {
     TypeA a;
     TypeB b;
     ...
};

用量

safe_union 在執行階段只會是一種類型。根據預設 為聯集中的第一個型別以上述例子來說 MySafeUnion 預設為 TypeA

hidl-gen 會為下列項目產生自訂類別或結構: C++ 和 Java 中的 safe_union。這個類別包含 判別器 (在 hidl_discriminator 中), 取得目前的鑑別器 (getDiscriminator) 和 setter 每個成員的 getter。每個 setter 和 getter 的名稱都與其成員完全相同。 舉例來說,TypeA a 的 getter 稱為「a」, 會傳回 TypeA 的內容。相應的 setter 屬性 名稱是「a」並採用 TypeA 的參數。在以下位置設定值: safe_union 會將鑑別器的值更新為 由 getDiscriminator 傳回。從 目前並非歧視者取消程式的鑑別器。適用對象 例如在getDiscriminator MySafeUnion 會傳回 hidl_discriminator::b,然後 嘗試擷取 a 會取消程式。

單州

safe_union 一律有值,不過如果您不想如此 有值,使用 android.hidl.safe_union@1.0::Monostate 做為 預留位置。舉例來說,以下聯集可以 noinit (空白) 或 foo

import android.hidl.safe_union@1.0::Monostate;

safe_union OptionalFoo {
     Monostate noinit;
     Foo foo;
};