代码之家  ›  专栏  ›  技术社区  ›  sme

Java绑定库生成两个名称相同但返回类型不同的成员

  •  0
  • sme  · 技术社区  · 2 年前

    我正在使用创建一个Java/Android绑定库。AAR文件。编译C#绑定库项目后,它会生成以下错误:

    Type 'PushMessageHandler' already defines a member called 'A' with the same parameter types

    问题是一个类包含这两个方法,它们的名称相同,但返回类型不同:

    // Metadata.xml XPath method reference: path="/api/package[@name='com.xiaomi.mipush.sdk']/class[@name='PushMessageHandler']/method[@name='a' and count(parameter)=0]"
    [Register ("a", "()V", "")]
    protected static unsafe void A ()
    {
        const string __id = "a.()V";
        try {
            _members.StaticMethods.InvokeVoidMethod (__id, null);
        } finally {
        }
    }
    
    // Metadata.xml XPath method reference: path="/api/package[@name='com.xiaomi.mipush.sdk']/class[@name='PushMessageHandler']/method[@name='a' and count(parameter)=0]"
    [Register ("a", "()Z", "GetAHandler")]
    protected override unsafe bool A ()
    {
        const string __id = "a.()Z";
        try {
            var __rm = _members.InstanceMethods.InvokeVirtualBooleanMethod (__id, this, null);
            return __rm;
        } finally {
        }
    }
    

    但正如您所看到的,XPath方法引用对于两种方法都是相同的: path="/api/package[@name='com.xiaomi.mipush.sdk']/class[@name='PushMessageHandler']/method[@name='a' and count(parameter)=0]"

    因此,当我尝试更改中某个方法的方法名时 Metadata.xml ,它更改了两个方法的名称,但相同的错误仍然存在。

    有没有办法只更改其中一个方法的名称 ?(特别是void返回类型的方法)。有没有办法将返回类型包括在XPath方法引用中?

    1 回复  |  直到 2 年前
        1
  •  0
  •   sme    2 年前

    在对api.xml文件进行了一些挖掘,并进行了一些尝试和错误之后,我发现您可以添加 @return='void' 内部 method[...] 部分目标的具体方法:

    <attr path="/api/package[@name='com.xiaomi.mipush.sdk']/class[@name='PushMessageHandler']/method[@name='a' and count(parameter)=0 and @return='void']" name="managedName">AVoid</attr>