Compartilhar via


Criando enumerações

Há casos em que as bibliotecas Java Android usam constantes inteiras para representar estados que são passados para propriedades ou métodos das bibliotecas. Para associações amplamente distribuídas, pode ser útil associar essas constantes inteiras a enumerações em C# para fornecer uma API melhor para os consumidores.

Para associações internas ou de baixo uso, geralmente não vale a pena configurá-las, pois os consumidores podem simplesmente usar as constantes associadas em vez de uma enumeração.

Para facilitar esse mapeamento, dois arquivos são adicionados aos projetos de associação pelo modelo de projeto padrão:

  • EnumFields.xml - Este arquivo define o mapeamento entre constantes inteiras Java e uma enumeração C#

  • EnumMethods.xml - Este arquivo define quais métodos/propriedades que atualmente possuem um parâmetro de método int ou têm um tipo de retorno int devem ser modificados para usar uma enumeração.

Definindo uma enumeração usando EnumFields.xml

O arquivo EnumFields.xml contém o mapeamento entre as constantes Java int e o C# enums. Vejamos o seguinte exemplo de uma enumeração C# sendo criada para um conjunto de int constantes:

<mapping jni-class="com/skobbler/ngx/map/realreach/SKRealReachSettings" clr-enum-type="Skobbler.Ngx.Map.RealReach.SKMeasurementUnit">
    <field jni-name="UNIT_SECOND" clr-name="Second" value="0" />
    <field jni-name="UNIT_METER" clr-name="Meter" value="1" />
    <field jni-name="UNIT_MILIWATT_HOURS" clr-name="MilliwattHour" value="2" />
</mapping>

Aqui, pegamos a classe SKRealReachSettings Java e definimos uma enumeração C# chamada SKMeasurementUnit no namespace Skobbler.Ngx.Map.RealReach. As field entradas definem o nome da constante Java (exemplo UNIT_SECOND), o nome da entrada de enumeração (exemplo Second) e o valor inteiro representado por ambas as entidades (exemplo 0).

Definindo métodos getter/setter usando EnumMethods.xml

O arquivo EnumMethods.xml permite alterar os parâmetros e os tipos de retorno de métodos de constantes Java int para C# enums. Em outras palavras, ele mapeia a leitura e a gravação de enumerações C# (definidas no arquivo EnumFields.xml) para a constante int, e os métodos get Java set.

Dada a SKRealReachSettings enumeração definida acima, o seguinte arquivo EnumMethods.xml definiria o getter/setter para essa enumeração:

<mapping jni-class="com/skobbler/ngx/map/realreach/SKRealReachSettings">
    <method jni-name="getMeasurementUnit" parameter="return" clr-enum-type="Skobbler.Ngx.Map.RealReach.SKMeasurementUnit" />
    <method jni-name="setMeasurementUnit" parameter="measurementUnit" clr-enum-type="Skobbler.Ngx.Map.RealReach.SKMeasurementUnit" />
</mapping>

A primeira method linha mapeia o valor de retorno do método Java getMeasurementUnit para a SKMeasurementUnit enumeração. A segunda method linha mapeia o primeiro parâmetro do setMeasurementUnit para a mesma enum.

Com todas essas alterações em vigor, você pode usar o código a seguir no .NET para Android para definir o MeasurementUnit:

realReachSettings.MeasurementUnit = SKMeasurementUnit.Second;