Freigeben über


Erstellen von Enumerationen

Es gibt Fälle, in denen Java Android-Bibliotheken ganze Konstanten verwenden, um Zustände darzustellen, die an Eigenschaften oder Methoden der Bibliotheken übergeben werden. Bei weit verteilten Bindungen kann es nützlich sein, diese ganzzahligen Konstanten an Enumerationen in C# zu binden, um eine ansprechendere API für Verbraucher bereitzustellen.

Für interne oder niedrige Verwendungsbindungen lohnt es sich in der Regel nicht, diese einzurichten, da die Verbraucher einfach die gebundenen Konstanten anstelle einer Enumeration verwenden können.

Um diese Zuordnung zu vereinfachen, werden zwei Dateien der Standardprojektvorlage zum Binden von Projekten hinzugefügt:

  • EnumFields.xml – Diese Datei definiert die Zuordnung zwischen java-ganzzahligen Konstanten und einer C#-Aufzählung.

  • EnumMethods.xml – Diese Datei definiert, welche Methoden/Eigenschaften derzeit einen int Methodenparameter verwenden oder über einen int Rückgabetyp verfügen, um stattdessen eine Enumeration zu verwenden.

Definieren einer Enumeration mithilfe von EnumFields.xml

Die Datei EnumFields.xml enthält die Zuordnung zwischen int-Konstanten von Java und enums von C#. Betrachten Sie das folgende Beispiel für eine C# Enumeration, die für mehrere int-Konstanten erstellt wird:

<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 wird die Java-Klasse SKRealReachSettings verwendet, und es wird eine C# Enumeration mit dem Namen SKMeasurementUnit im Namespace Skobbler.Ngx.Map.RealReach definiert. Die field-Einträge definieren den Namen der Java-Konstanten (z. B. UNIT_SECOND), den Namen des Enumerationseintrags (z. B. Second) und den ganzzahligen Wert, der von beiden Entitäten dargestellt wird (z. B. 0).

Definieren von Getter-/Settermethoden mithilfe von EnumMethods.xml

Die Datei EnumMethods.xml ermöglicht die Änderung von Methodenparametern und Rückgabetypen von int-Konstanten von Java in enums von C#. Das heißt, das Lesen und Schreiben von C#-Enumerationen (definiert in der Datei EnumFields.xml) wird in Java int-Konstanten sowie get- und set-Methoden zugeordnet.

Bei der oben definierten SKRealReachSettings-Enumeration definiert die folgende EnumMethods.xml-Datei den Getter/Setter für diese Enumeration:

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

In der ersten method-Zeile wird der Rückgabewert der Java-Methode getMeasurementUnit der SKMeasurementUnit-Enumeration zugeordnet. In der zweiten method-Zeile wird der erste Parameter von setMeasurementUnit derselben Enumeration zugeordnet.

Mit all diesen Änderungen können Sie den folgenden Code in .NET für Android verwenden, um folgendes MeasurementUnitfestzulegen:

realReachSettings.MeasurementUnit = SKMeasurementUnit.Second;