safe_union
ใน HIDL แสดงถึงประเภทการรวมที่มีแท็กชัดเจน
รายการนี้คล้ายกับ union
ยกเว้น safe_union
รายการ
ติดตามประเภทพื้นฐานและทำงานร่วมกับ Java ได้
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
) ซึ่งเป็นวิธีในการ
ดู Disriminator ในปัจจุบัน (getDiscriminator
) และตัวตั้งค่าและ
Getter สำหรับสมาชิกแต่ละคน ชื่อ Setter และ Getter แต่ละรายการจะชื่อเป็นสมาชิกจริงๆ
ตัวอย่างเช่น Getter ของ TypeA a
เรียกว่า "a" และ
แสดงผลเป็น TypeA
ตัวตั้งค่าที่เกี่ยวข้องจะเป็น
เรียกว่า "a" และรับพารามิเตอร์ TypeA
กำหนดค่าใน
safe_union
จะอัปเดตค่าของดิสคริมิเตอร์เป็น
getDiscriminator
ส่งคืน การเข้าถึงค่าจาก
Disriminator ที่ไม่ใช่ Disriminator ในปัจจุบันล้มเลิกโปรแกรมไป สำหรับ
ถ้าเรียกใช้ 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; };