Opsommingen maken

Er zijn gevallen waarin Java Android-bibliotheken gehele getallen gebruiken om statussen weer te geven die worden doorgegeven aan eigenschappen of methoden van de bibliotheken. Voor algemeen gedistribueerde bindingen kan het handig zijn om deze gehele constanten te binden aan opsommingen in C# om een mooiere API voor consumenten te bieden.

Voor interne of lage gebruiksbindingen is het meestal niet de moeite waard om deze in te stellen, omdat de consumenten gewoon de afhankelijke constanten kunnen gebruiken in plaats van een opsomming.

Om deze toewijzing te vergemakkelijken, voegt de standaardprojectsjabloon twee bestanden toe aan toewijzingsprojecten:

  • EnumFields.xml - Dit bestand definieert de toewijzing tussen Java-geheelgetalconstanten en een C#-opsomming

  • EnumMethods.xml : dit bestand definieert welke methoden/eigenschappen momenteel een int methodeparameter gebruiken of waarvoor een int retourtype moet worden gewijzigd om in plaats daarvan een opsomming te gebruiken.

Een opsomming definiëren met behulp van EnumFields.xml

Het bestand EnumFields.xml bevat de toewijzing tussen Java-constanten int en C# enums. Laten we het volgende voorbeeld nemen van een C#-opsomming die wordt gemaakt voor een set int constanten:

<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>

Hier hebben we de Java-klasse SKRealReachSettings genomen en een C#-opsomming gedefinieerd in de naamruimte Skobbler.Ngx.Map.RealReach. De field vermeldingen definiëren de naam van de Java-constante (voorbeeld UNIT_SECOND), de naam van de enum-vermelding (voorbeeld Second) en de gehele waarde die wordt vertegenwoordigd door beide entiteiten (voorbeeld 0).

Getter-/settermethoden definiëren met behulp van EnumMethods.xml

Met het bestandEnumMethods.xml kunt u methodeparameters wijzigen en typen retourneren van Java-constanten int naar C# enums. Met andere woorden, het wijst het lezen en schrijven van C#-opsommingen (gedefinieerd in het EnumFields.xml-bestand ) toe aan Java-constante intget en set -methoden.

Op basis van de hierboven gedefinieerde SKRealReachSettings opsomming zal het volgende EnumMethods.xml-bestand de getter/setter voor deze enum definiëren.

<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>

De eerste method regel wijst de retourwaarde van de Java-methode getMeasurementUnit toe aan de SKMeasurementUnit enum. De tweede method regel koppelt de eerste parameter van de setMeasurementUnit aan dezelfde enumeratie.

Als al deze wijzigingen zijn doorgevoerd, kunt u de volgende code in .NET voor Android gebruiken om MeasurementUnit in te stellen:

realReachSettings.MeasurementUnit = SKMeasurementUnit.Second;