O Google tem o compromisso de promover a igualdade racial para as comunidades negras. Saiba como.

União Segura

safe_union em HIDL representa um tipo de união explicitamente marcados. Isso é semelhante a uma union exceto safe_union mantém o controle do tipo subjacente e é compatível com Java. O safe_union tipo está disponível em Android 10 e superior para dispositivos novos e atualizados.

Sintaxe

A safe_union é expressa em HIDL exatamente como uma union ou struct .

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

Uso

Em tempo de execução, um safe_union é sempre apenas um tipo. Por padrão, será o primeiro tipo no sindicato. Por exemplo, acima, MySafeUnion é, por padrão TypeA .

hidl-gen gera uma classe personalizada ou struct para uma safe_union em C ++ e Java. Esta classe inclui um discriminador para cada membro (em hidl_discriminator ), um método para obter o discriminador atual ( getDiscriminator ) e setters e getters para cada membro. Cada setter e getter é nomeado exatamente como seu membro. Por exemplo, o getter para TypeA a será chamado de "a", e ele irá retornar algo de TypeA . O setter correspondente também será chamado "a" e tomar um parâmetro de TypeA . A definição do valor em um safe_union irá atualizar o valor do discriminador como retornado por getDiscriminator . Acessar um valor de um discriminador que não é o discriminador atual aborta o programa. Por exemplo, se chamando getDiscriminator em uma instância do MySafeUnion retornos hidl_discriminator::b , em seguida, tentar recuperar a abortará o programa.

Monoestado

A safe_union sempre tem um valor, mas se for desejado para não ter um valor, o uso android.hidl.safe_union@1.0::Monostate como um espaço reservado. Por exemplo, a sequência de união pode ser noinit (vazio) ou foo :

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

safe_union OptionalFoo {
     Monostate noinit;
     Foo foo;
};