You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Xamarin中正确绑定含多属性的Java枚举?

Xamarin绑定带多属性Java枚举的解决方案

问题背景

你需要绑定的Java枚举定义如下:

public enum WriteType {
  WITH_RESPONSE(WRITE_TYPE_DEFAULT, PROPERTY_WRITE),
  WITHOUT_RESPONSE(WRITE_TYPE_NO_RESPONSE, PROPERTY_WRITE_NO_RESPONSE),
  SIGNED(WRITE_TYPE_SIGNED, PROPERTY_SIGNED_WRITE);

  public final int writeType;
  public final int property;

  WriteType(final int writeType, final int property) {
    this.writeType = writeType;
    this.property = property;
  }
}

绑定编译时Visual Studio将其生成为类,但构造器被识别为返回int类型的同名方法,触发错误:

CS0542 'WriteType': member names cannot be the same as their enclosing type

解决方法

通过Xamarin绑定项目的Metadata.xml文件修改绑定规则,调整构造器和属性的生成逻辑:

  1. 在绑定项目的Transforms目录下,找到Metadata.xml(如果没有则新建)
  2. 添加以下配置,替换其中的你的包名为枚举实际所在的Java包路径:
<metadata>
  <!-- 重命名构造器,避免与类名冲突 -->
  <attr path="/api/package[@name='你的包名']/enum[@name='WriteType']/constructor" name="managedName">_ctor</attr>
  <!-- 为属性重命名,符合C#命名规范 -->
  <attr path="/api/package[@name='你的包名']/enum[@name='WriteType']/field[@name='writeType']" name="managedName">WriteTypeValue</attr>
  <attr path="/api/package[@name='你的包名']/enum[@name='WriteType']/field[@name='property']" name="managedName">PropertyValue</attr>
</metadata>

原理说明

Java中带自定义构造器和属性的枚举,在Xamarin默认绑定逻辑中会被转换为C#类而非枚举。通过Metadata.xml的指令:

  • 重命名构造器规避同名冲突错误
  • 调整属性名称适配C#编码习惯
  • 保留原枚举的所有实例和属性功能

内容的提问来源于stack exchange,提问作者alsaleem

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 00:07:18