HIDL'deki safe_union
, açık şekilde etiketlenmiş bir birlik türünü temsil eder.
Bu, union
ile benzerdir ancak safe_union
şunları korur:
temel türü izler ve Java ile uyumludur. İlgili içeriği oluşturmak için kullanılan
safe_union
türü, Android 10'da kullanılabilir
yeni ve yükseltilmiş cihazlar için
daha yüksek olduğunu unutmayın.
Sözdizimi
safe_union
, HIDL'de tam olarak şu şekilde ifade edilir:
union
veya struct
.
safe_union MySafeUnion { TypeA a; TypeB b; ... };
Kullanım
Çalışma zamanında safe_union
yalnızca bir türdür. Varsayılan olarak
sendikadaki ilk tür. Örneğin yukarıda,
MySafeUnion
, varsayılan olarak TypeA
değeridir.
hidl-gen
,
safe_union
. Bu sınıfta bir
her üye için ayrımlayıcı (hidl_discriminator
içinde) görüntüler.
geçerli ayırıcıyı (getDiscriminator
) ve belirleyicileri
alacaksınız. Her belirleyici ve alıcı tam olarak üyesinin adını alır.
Örneğin, TypeA a
için alıcının adı "a" ve
TypeA
değerini döndürür. İlgili belirleyici
"a" olarak adlandırılmalıdır ve TypeA
parametresini alır. Değeri
safe_union
, diskiminatörün değerini
getDiscriminator
tarafından iade edildi. Bir
o ayrımcı programı iptal eder. Örneğin,
şunun bir örneğinde getDiscriminator
çağrılıyorsa:
MySafeUnion
, hidl_discriminator::b
değerini döndürür, ardından
a
öğesini almaya çalışmak programı iptal eder.
Tek statü
safe_union
her zaman bir değere sahiptir, ancak istenmesi durumunda
bir değeri varsa, bir değer olarak android.hidl.safe_union@1.0::Monostate
kullanın
yer tutucusu içerir. Örneğin, aşağıdaki birleşimi
noinit
(boş) veya foo
:
import android.hidl.safe_union@1.0::Monostate; safe_union OptionalFoo { Monostate noinit; Foo foo; };