Bagikan melalui


Membuat enumerasi

Ada kasus di mana pustaka Java Android menggunakan konstanta bilangan bulat untuk mewakili status yang diteruskan ke properti atau metode pustaka. Untuk pengikatan yang didistribusikan secara luas, mungkin berguna untuk mengikat konstanta bilangan bulat ini ke enum di C# untuk menyediakan API yang lebih baik bagi konsumen.

Untuk pengikatan penggunaan internal atau rendah, biasanya tidak sepadan dengan upaya untuk mengaturnya, karena konsumen cukup menggunakan konstanta terikat alih-alih enumerasi.

Untuk memfasilitasi pemetaan ini, dua file ditambahkan ke proyek pengikatan dengan template proyek bawaan.

  • EnumFields.xml - File ini menentukan pemetaan antara konstanta bilangan bulat Java dan enumerasi C#

  • EnumMethods.xml - File ini menentukan metode/properti mana yang saat ini mengambil int parameter metode atau memiliki int jenis pengembalian harus dimodifikasi untuk menggunakan enumerasi sebagai gantinya.

Menentukan enum menggunakan EnumFields.xml

File EnumFields.xml berisi pemetaan antara konstanta Java int dan C# enums. Mari kita ambil contoh enum C# berikut yang dibuat untuk sekumpulan int konstanta:

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

Di sini kita telah mengambil kelas SKRealReachSettings Java dan mendefinisikan enum C# yang disebut SKMeasurementUnit di namespace Skobbler.Ngx.Map.RealReach. Entri field menentukan nama konstanta Java (contoh UNIT_SECOND), nama entri enum (contoh Second), dan nilai bilangan bulat yang diwakili oleh kedua entitas (misalnya 0).

Menentukan metode getter/setter menggunakan EnumMethods.xml

File EnumMethods.xml memungkinkan perubahan parameter metode dan mengembalikan jenis dari konstanta Java int ke C# enums. Dengan kata lain, ia memetakan pembacaan dan penulisan enum C# (didefinisikan dalam file EnumFields.xml) ke konstanta int dan get metode Javaset.

Mengingat enum yang SKRealReachSettings ditentukan di atas, file EnumMethods.xml berikut akan menentukan getter/setter untuk enum ini:

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

Baris pertama method memetakan nilai pengembalian metode Java getMeasurementUnit ke SKMeasurementUnit enum. Baris kedua method memetakan parameter pertama dari setMeasurementUnit ke enum yang sama.

Dengan semua perubahan ini, Anda dapat menggunakan kode berikut di .NET untuk Android untuk mengatur MeasurementUnit:

realReachSettings.MeasurementUnit = SKMeasurementUnit.Second;