Google se compromete a impulsar la igualdad racial para las comunidades afrodescendientes. Obtén información al respecto.
Se usó la API de Cloud Translation para traducir esta página.
Switch to English

Unión segura

safe_union en HIDL representa un tipo de unión etiquetado explícitamente. Esto es similar a una union excepto que safe_union realiza un seguimiento del tipo subyacente y es compatible con Java. El tipo safe_union está disponible en Android 10 y superior para dispositivos nuevos y actualizados.

Sintaxis

Un safe_union se expresa en HIDL exactamente como una union o struct .

safe_union MySafeUnion {
     TypeA a;
     TypeB b;
     ...
};

Uso

En tiempo de ejecución, safe_union es solo de un tipo. De forma predeterminada, será el primer tipo en la unión. Por ejemplo, arriba, MySafeUnion es por defecto TypeA .

hidl-gen genera una clase o estructura personalizada para un safe_union tanto en C ++ como en Java. Esta clase incluye un discriminador para cada miembro (en hidl_discriminator ), un método para obtener el discriminador actual ( getDiscriminator ) y setters y getters para cada miembro. Cada setter y getter se nombra exactamente como su miembro. Por ejemplo, el captador de TypeA a se llamará "a" y devolverá algo de TypeA . El setter correspondiente también se llamará "a" y tomará un parámetro de TypeA . Establecer el valor en safe_union actualizará el valor del discriminador como lo devuelve getDiscriminator . Acceder a un valor de un discriminador que no es el discriminador actual aborta el programa. Por ejemplo, si llamar a getDiscriminator en una instancia de MySafeUnion devuelve hidl_discriminator::b , entonces intentar recuperar a abortará el programa.

Monoestatal

Un safe_union siempre tiene un valor, pero si se desea que no tenga un valor, use android.hidl.safe_union@1.0::Monostate como marcador de posición. Por ejemplo, la siguiente unión puede ser noinit (vacía) o foo :

import android.hidl.safe_union@1.0::Monostate;

safe_union OptionalFoo {
     Monostate noinit;
     Foo foo;
};