اتحادیه ایمن

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