通过


创建枚举

在某些情况下,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,并在命名空间 SKMeasurementUnit 中定义了一个名为 Skobbler.Ngx.Map.RealReach 的 C# 枚举。 field 条目定义 Java 常量的名称(示例 UNIT_SECOND)、枚举条目的名称(示例 Second)以及由两个实体表示的整数值(例如 0)。

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

EnumMethods.xml 文件允许更改方法参数,并将返回类型从 Java int 常数更改为 C# enums。 换句话说,它将 C# 枚举的读取和写入(在 EnumFields.xml 文件中定义)映射到 Java 中的 int 常量 getset 方法。

根据上面定义的 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 枚举。 第二行 methodsetMeasurementUnit 的第一个参数映射到同一枚举。

完成所有这些更改后,可以在适用于 Android 的 .NET 中使用以下代码来设置 MeasurementUnit

realReachSettings.MeasurementUnit = SKMeasurementUnit.Second;