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. This class includes a discriminator for each member (in hidl_discriminator
), a method to get the current discriminator ( getDiscriminator
), and setters and getters for each member. Каждый сеттер и геттер называется точно так же, как и его член. Например, метод получения для 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
отслеживает базовый тип и совместим с 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
), метод для получения текущего дискриминатора ( getDiscriminator
), а также методы установки и получения для каждого члена. Каждый сеттер и геттер называется точно так же, как и его член. Например, метод получения для TypeA a
называется «a» и возвращает что-то вроде TypeA
. Соответствующий установщик также называется «a» и принимает параметр TypeA
. Установка значения в safe_union
обновляет значение дискриминатора, возвращаемое getDiscriminator
. Доступ к значению из дискриминатора, который не является текущим дискриминатором, прерывает программу. Например, если вызов getDiscriminator
для экземпляра MySafeUnion
возвращает hidl_discriminator::b
, то попытка получить a
прерывает программу.
Monostate
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
отслеживает базовый тип и совместим с Java. Тип safe_union
доступен в Android 10 и более поздних версиях для новых и обновленных устройств.
Синтаксис
safe_union
выражается в HIDL точно так же, как union
или struct
.
safe_union MySafeUnion { TypeA a; TypeB b; ... };
Использование
Во время выполнения safe_union
может быть только одного типа. По умолчанию это первый тип в объединении. For instance, above, MySafeUnion
is by default 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; };