27 Mart 2025'ten itibaren AOSP'yi derlemek ve AOSP'ye katkıda bulunmak için aosp-main
yerine android-latest-release
kullanmanızı öneririz. Daha fazla bilgi için AOSP'de yapılan değişiklikler başlıklı makaleyi inceleyin.
Güvenli birleştirme
Koleksiyonlar ile düzeninizi koruyun
İçeriği tercihlerinize göre kaydedin ve kategorilere ayırın.
HIDL'de safe_union
, açıkça etiketlenmiş bir birleştirme türünü temsil eder.
Bu, union
'e benzer. Fark, safe_union
'un temel türün kaydını tutması ve Java ile uyumlu olmasıdır. safe_union
türü, yeni ve yükseltilmiş cihazlarda Android 10 ve sonraki sürümlerde kullanılabilir.
Sözdizimi
safe_union
, HIDL'de tam olarak union
veya struct
gibi ifade edilir.
safe_union MySafeUnion {
TypeA a;
TypeB b;
...
};
Kullanım
Çalışma zamanında safe_union
her zaman tek bir türdedir. Varsayılan olarak, birleşmedeki ilk türdür. Örneğin, yukarıdaki örnekte MySafeUnion
varsayılan olarak TypeA
değerine sahiptir.
hidl-gen
, hem C++ hem de Java'da safe_union
için özel bir sınıf veya yapı oluşturur. Bu sınıf, her üye için bir ayırt edici (hidl_discriminator
içinde), mevcut ayırt ediciyi (getDiscriminator
) alma yöntemi ve her üye için ayarlayıcı ve alıcı içerir. Her ayarlayıcı ve alıcı, üyesiyle tam olarak aynı şekilde adlandırılır.
Örneğin, TypeA a
için alıcı "a" olarak adlandırılır ve TypeA
türünde bir değer döndürür. İlgili ayarlayıcı da "a" olarak adlandırılır ve TypeA
parametresi alır. Değeri bir safe_union
içinde ayarlamak, ayırıcının değerini getDiscriminator
tarafından döndürülen şekilde günceller. Mevcut ayırıcı olmayan bir ayırıcıdan bir değere erişmek programı durdurur. Örneğin, MySafeUnion
örneğinde getDiscriminator
çağrısı hidl_discriminator::b
döndürüyorsa a
'ı almaya çalışmak programı durdurur.
Monostate
safe_union
her zaman bir değere sahiptir ancak değer olmaması isteniyorsa yer tutucu olarak android.hidl.safe_union@1.0::Monostate
kullanın. Örneğin, aşağıdaki birleştirme noinit
(boş) veya foo
olabilir:
import android.hidl.safe_union@1.0::Monostate;
safe_union OptionalFoo {
Monostate noinit;
Foo foo;
};
Bu sayfadaki içerik ve kod örnekleri, İçerik Lisansı sayfasında açıklanan lisanslara tabidir. Java ve OpenJDK, Oracle ve/veya satış ortaklarının tescilli ticari markasıdır.
Son güncelleme tarihi: 2025-07-27 UTC.
[[["Anlaması kolay","easyToUnderstand","thumb-up"],["Sorunumu çözdü","solvedMyProblem","thumb-up"],["Diğer","otherUp","thumb-up"]],[["İhtiyacım olan bilgiler yok","missingTheInformationINeed","thumb-down"],["Çok karmaşık / çok fazla adım var","tooComplicatedTooManySteps","thumb-down"],["Güncel değil","outOfDate","thumb-down"],["Çeviri sorunu","translationIssue","thumb-down"],["Örnek veya kod sorunu","samplesCodeIssue","thumb-down"],["Diğer","otherDown","thumb-down"]],["Son güncelleme tarihi: 2025-07-27 UTC."],[],[],null,["# Safe union\n\n`safe_union` in HIDL represents an explicitly tagged union type.\nThis is similar to a `union` except `safe_union` keeps\ntrack of the underlying type and is compatible with Java. The\n`safe_union` type is available in Android 10\nand higher for new and upgraded devices.\n\nSyntax\n------\n\nA `safe_union` is expressed in HIDL exactly like a\n`union` or `struct`. \n\n```scdoc\nsafe_union MySafeUnion {\n TypeA a;\n TypeB b;\n ...\n};\n```\n\nUsage\n-----\n\nAt runtime, a `safe_union` is only ever one type. By default, it's\nthe first type in the union. For instance, above,\n`MySafeUnion` is by default `TypeA`.\n\n`hidl-gen` generates a custom class or struct for a\n`safe_union` in both C++ and Java. This class includes a\ndiscriminator for each member (in `hidl_discriminator`), a method to\nget the current discriminator (`getDiscriminator`), and setters and\ngetters for each member. Each setter and getter is named exactly as its member.\nFor instance, the getter for `TypeA a` is called \"a\", and it\nreturns something of `TypeA`. The corresponding setter is also\nbe called \"a\" and takes a parameter of `TypeA`. Setting the value in\na `safe_union` updates the value of the discriminator as\nreturned by `getDiscriminator`. Accessing a value from a\ndiscriminator that isn't the current discriminator aborts the program. For\ninstance, if calling `getDiscriminator` on an instance of\n`MySafeUnion` returns `hidl_discriminator::b`, then\ntrying to retrieve `a` aborts the program.\n\nMonostate\n---------\n\nA `safe_union` always has a value, but if it is desired to not\nhave a value, use `android.hidl.safe_union@1.0::Monostate` as a\nplaceholder. For instance, the following union can either be\n`noinit` (empty) or `foo`: \n\n```python\nimport android.hidl.safe_union@1.0::Monostate;\n\nsafe_union OptionalFoo {\n Monostate noinit;\n Foo foo;\n};\n```"]]