از 27 مارس 2025، توصیه می کنیم از android-latest-release
به جای aosp-main
برای ساختن و کمک به AOSP استفاده کنید. برای اطلاعات بیشتر، به تغییرات AOSP مراجعه کنید.
اتحادیه ایمن
با مجموعهها، منظم بمانید
ذخیره و طبقهبندی محتوا براساس اولویتهای شما.
safe_union
در HIDL نشان دهنده یک نوع اتحادیه با برچسب صریح است. این شبیه به یک union
است به جز اینکه safe_union
نوع اصلی را ردیابی می کند و با جاوا سازگار است. نوع safe_union
در اندروید 10 و بالاتر برای دستگاههای جدید و ارتقا یافته موجود است.
نحو
یک safe_union
در HIDL دقیقاً مانند یک union
یا struct
بیان میشود.
safe_union MySafeUnion {
TypeA a;
TypeB b;
...
};
استفاده
در زمان اجرا، safe_union
تنها یک نوع است. به طور پیش فرض، این اولین نوع در اتحادیه است. به عنوان مثال، در بالا، MySafeUnion
به طور پیش فرض TypeA
است.
hidl-gen
یک کلاس یا ساختار سفارشی برای safe_union
در C++ و Java تولید میکند. این کلاس شامل یک تفکیک کننده برای هر عضو (در hidl_discriminator
)، یک متد برای به دست آوردن تفکیک کننده فعلی ( getDiscriminator
) و تنظیم کننده ها و دریافت کننده ها برای هر عضو است. هر تنظیم کننده و گیرنده دقیقاً به عنوان عضو خود نامگذاری می شود. به عنوان مثال، دریافت کننده TypeA a
"a" نامیده می شود و چیزی از TypeA
را برمی گرداند. تنظیم کننده مربوطه نیز "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;
};
محتوا و نمونه کدها در این صفحه مشمول پروانههای توصیفشده در پروانه محتوا هستند. جاوا و OpenJDK علامتهای تجاری یا علامتهای تجاری ثبتشده Oracle و/یا وابستههای آن هستند.
تاریخ آخرین بهروزرسانی 2025-07-29 بهوقت ساعت هماهنگ جهانی.
[[["درک آسان","easyToUnderstand","thumb-up"],["مشکلم را برطرف کرد","solvedMyProblem","thumb-up"],["غیره","otherUp","thumb-up"]],[["اطلاعاتی که نیاز دارم وجود ندارد","missingTheInformationINeed","thumb-down"],["بیشازحد پیچیده/ مراحل بسیار زیاد","tooComplicatedTooManySteps","thumb-down"],["قدیمی","outOfDate","thumb-down"],["مشکل ترجمه","translationIssue","thumb-down"],["مشکل کد / نمونهها","samplesCodeIssue","thumb-down"],["غیره","otherDown","thumb-down"]],["تاریخ آخرین بهروزرسانی 2025-07-29 بهوقت ساعت هماهنگ جهانی."],[],[],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```"]]