Güvenli birleştirme

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