共用方式為


建立列舉

在某些情況下,Java Android 連結庫會使用整數常數來表示傳遞至連結庫屬性或方法的狀態。 對於廣泛散發的系結,將這些整數常數係結至 C# 中的列舉可能會很有用,以便為取用者提供較好的 API。

對於內部或低使用量系結,通常不值得設定這些系結,因為取用者只需使用係結常數,而不是列舉。

為了方便進行此對應,默認專案範本會將兩個檔案新增至系結專案:

  • EnumFields.xml - 此檔案會定義 Java 整數常數與 C# 列舉之間的對應

  • EnumMethods.xml - 此檔案會定義目前採用int方法參數或具有int傳回型別的方法/屬性應該修改為改用列舉。

使用 EnumFields.xml 定義列舉

EnumFields.xml檔案包含 Java int 常數與 C# enums之間的對應。 讓我們針對一組 int 常數建立下列 C# 列舉範例:

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

在這裡,我們已取得 Java 類別SKRealReachSettings,並在 命名空間Skobbler.Ngx.Map.RealReach中定義名為 SKMeasurementUnit 的 C# 列舉。 專案field會定義 Java 常數的名稱(範例)、列舉項目的名稱(exampleUNIT_SECONDSecond),以及兩個實體所代表的整數值(範例0)。

使用 EnumMethods.xml 定義 getter/setter 方法

EnumMethods.xml檔案允許將方法參數和從 Java int 常數傳回類型變更為 C# enums。 換句話說,它會將 C# 列舉的讀取和寫入對應至 Java int 常數getset方法(定義於 EnumFields.xml 檔案中)。

SKRealReachSettings假設上面定義的列舉,下列EnumMethods.xml檔案會定義此列舉的 getter/setter:

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

第一 method 行會將Java getMeasurementUnit 方法的傳回值對應至 SKMeasurementUnit 列舉。 第二 method 行會將 的第一個參數 setMeasurementUnit 對應至相同的列舉。

有了上述所有變更,您就可以在適用於 Android 的 .NET 中使用下列程式代碼來設定 MeasurementUnit

realReachSettings.MeasurementUnit = SKMeasurementUnit.Second;