1

我在使用 Xamarin 编译绑定项目时遇到问题。原始 jar 文件有一个接口,其中包含两个名称相同但接收不同参数的方法(重载方法)。当绑定项目将 jar 文件转换为 C# 代码时,由于这种重载会导致一些错误。

如果我使用 Metadata.xml 文件更改方法名称,它会更改两个名称方法,但会以相同的错误结尾。

这是jar文件中的原始接口代码:

 public abstract interface MitControllerListener
{
  public abstract void setMITCardInformation(MITCardInformation paramMITCardInformation);

  public abstract void setMitError(String paramString, int paramInt);

  public abstract void setResult(String paramString);

  public abstract void setResult(BeanResponseSell paramBeanResponseSell);
}

这是重载方法对应的绑定项目中的api.xml:

<method abstract="true" deprecated="not deprecated" final="false" name="setResult" native="false" return="void" static="false" synchronized="false" visibility="public">
<parameter name="p0" type="com.mitec.bean.BeanResponseSell">
</parameter>
</method>
<method abstract="true" deprecated="not deprecated" final="false" name="setResult" native="false" return="void" static="false" synchronized="false" visibility="public">
<parameter name="p0" type="java.lang.String">
</parameter>
4

1 回答 1

1

最后,我可以使用文件 Metadata.xml 中的附加属性使其工作,以通过每个方法接收的参数类型将一个方法与另一个具有相同名称的方法区分开来:

<attr path="/api/package[@name='com.x.controller']/interface[@name='MitControllerListener']/method[@name='setResult' and parameter[1][@type='java.lang.String']]" name="managedName">SetResult2</attr>

我使用此线程中发布的回复之一中提出的想法作为此解决方案的基础

于 2013-09-10T15:37:07.377 回答