safe_union
در HIDL نشان دهنده یک نوع اتحادیه با برچسب صریح است. این شبیه به یک union
است به جز اینکه safe_union
نوع اصلی را ردیابی می کند و با جاوا سازگار است. The safe_union
type is available in Android 10 and higher for new and upgraded devices.
نحو
A safe_union
is expressed in HIDL exactly like a union
or struct
.
safe_union MySafeUnion { TypeA a; TypeB b; ... };
استفاده
At runtime, a safe_union
is only ever one type. به طور پیش فرض، این اولین نوع در اتحادیه است. به عنوان مثال، در بالا، 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; };
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
را می گیرد. Setting the value in a safe_union
updates the value of the discriminator as returned by getDiscriminator
. دسترسی به یک مقدار از یک تفکیک کننده که تمایز کننده فعلی نیست، برنامه را لغو می کند. برای مثال، اگر فراخوانی getDiscriminator
در نمونهای از MySafeUnion
hidl_discriminator::b
را برمیگرداند، سپس تلاش برای بازیابی a
برنامه لغو میشود.
مونوستات
A safe_union
always has a value, but if it is desired to not have a value, use android.hidl.safe_union@1.0::Monostate
as a placeholder. For instance, the following union can either be noinit
(empty) or foo
:
import android.hidl.safe_union@1.0::Monostate; safe_union OptionalFoo { Monostate noinit; Foo foo; };
safe_union
در HIDL نشان دهنده یک نوع اتحادیه با برچسب صریح است. این شبیه به یک union
است به جز safe_union
نوع زیرین را پیگیری می کند و با جاوا سازگار است. نوع safe_union
در Android 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
برگردانده شده است به روز می کند. دسترسی به یک مقدار از یک تفکیک کننده که تمایز کننده فعلی نیست، برنامه را لغو می کند. For instance, if calling getDiscriminator
on an instance of MySafeUnion
returns hidl_discriminator::b
, then trying to retrieve a
aborts the program.
مونوستات
A safe_union
always has a value, but if it is desired to not have a value, use android.hidl.safe_union@1.0::Monostate
as a placeholder. به عنوان مثال ، اتحادیه زیر می تواند noinit
(خالی) باشد یا foo
:
import android.hidl.safe_union@1.0::Monostate; safe_union OptionalFoo { Monostate noinit; Foo foo; };