Mulai 27 Maret 2025, sebaiknya gunakan android-latest-release
, bukan aosp-main
, untuk mem-build dan berkontribusi pada AOSP. Untuk mengetahui informasi selengkapnya, lihat Perubahan pada AOSP.
Gabungan aman
Tetap teratur dengan koleksi
Simpan dan kategorikan konten berdasarkan preferensi Anda.
safe_union
di HIDL mewakili jenis union yang diberi tag secara eksplisit.
Ini mirip dengan union
, kecuali safe_union
terus
melacak jenis yang mendasarinya dan kompatibel dengan Java. Jenis
safe_union
tersedia di Android 10
dan yang lebih tinggi untuk perangkat baru dan yang diupgrade.
Sintaksis
safe_union
dinyatakan dalam HIDL persis seperti
union
atau struct
.
safe_union MySafeUnion {
TypeA a;
TypeB b;
...
};
Penggunaan
Saat runtime, safe_union
hanya memiliki satu jenis. Secara default, ini adalah
jenis pertama dalam gabungan. Misalnya, di atas,
MySafeUnion
secara default adalah TypeA
.
hidl-gen
menghasilkan class atau struct kustom untuk
safe_union
di C++ dan Java. Class ini mencakup
diskriminator untuk setiap anggota (di hidl_discriminator
), metode untuk
mendapatkan diskriminator saat ini (getDiscriminator
), serta penyetel dan
pengambil untuk setiap anggota. Setiap penyetel dan pengambil diberi nama persis seperti anggotanya.
Misalnya, pengambil untuk TypeA a
disebut "a", dan
menampilkan sesuatu dari TypeA
. Penyetel yang sesuai juga
disebut "a" dan menggunakan parameter TypeA
. Menetapkan nilai di
safe_union
akan memperbarui nilai diskriminator seperti
yang ditampilkan oleh getDiscriminator
. Mengakses nilai dari
diskriminator yang bukan diskriminator saat ini akan membatalkan program. Misalnya, jika memanggil getDiscriminator
pada instance
MySafeUnion
menampilkan hidl_discriminator::b
, maka
mencoba mengambil a
akan membatalkan program.
Monostate
safe_union
selalu memiliki nilai, tetapi jika tidak ingin
memiliki nilai, gunakan android.hidl.safe_union@1.0::Monostate
sebagai
placeholder. Misalnya, gabungan berikut dapat berupa
noinit
(kosong) atau foo
:
import android.hidl.safe_union@1.0::Monostate;
safe_union OptionalFoo {
Monostate noinit;
Foo foo;
};
Konten dan contoh kode di halaman ini tunduk kepada lisensi yang dijelaskan dalam Lisensi Konten. Java dan OpenJDK adalah merek dagang atau merek dagang terdaftar dari Oracle dan/atau afiliasinya.
Terakhir diperbarui pada 2025-07-27 UTC.
[[["Mudah dipahami","easyToUnderstand","thumb-up"],["Memecahkan masalah saya","solvedMyProblem","thumb-up"],["Lainnya","otherUp","thumb-up"]],[["Informasi yang saya butuhkan tidak ada","missingTheInformationINeed","thumb-down"],["Terlalu rumit/langkahnya terlalu banyak","tooComplicatedTooManySteps","thumb-down"],["Sudah usang","outOfDate","thumb-down"],["Masalah terjemahan","translationIssue","thumb-down"],["Masalah kode / contoh","samplesCodeIssue","thumb-down"],["Lainnya","otherDown","thumb-down"]],["Terakhir diperbarui pada 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```"]]