HIDL 中的 safe_union
代表明確標記的聯集類型。
這和 union
類似,但 safe_union
保留
而且與 Java 相容
safe_union
類型適用於 Android 10
。
語法
safe_union
在 HIDL 中的表示方式與
union
或 struct
。
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; };