Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
重写由Xamarin Java绑定生成的方法_Java_C#_Android_Xamarin - Fatal编程技术网

重写由Xamarin Java绑定生成的方法

重写由Xamarin Java绑定生成的方法,java,c#,android,xamarin,Java,C#,Android,Xamarin,当使用Xamarin创建Java绑定项目以便可以通过C#引用Android Java JAR时,如何覆盖生成的C#only 我在绑定生成后遇到了一个错误,它似乎很容易通过使用显式转换而不是使用JavaCast实用程序生成来修复。我不知道如何告诉Xamarin绑定生成器跳过此方法生成而不完全排除它 我已经尝试在Additions文件夹和general项目中的Library Binding项目中包含重写的方法,但是当我这样做时收到的错误表明该类型已经使用相同的参数类型定义了一个成员,因此它正在识别它

当使用Xamarin创建Java绑定项目以便可以通过C#引用Android Java JAR时,如何覆盖生成的C#only

我在绑定生成后遇到了一个错误,它似乎很容易通过使用显式转换而不是使用JavaCast实用程序生成来修复。我不知道如何告诉Xamarin绑定生成器跳过此方法生成而不完全排除它

我已经尝试在Additions文件夹和general项目中的Library Binding项目中包含重写的方法,但是当我这样做时收到的错误表明该类型已经使用相同的参数类型定义了一个成员,因此它正在识别它,但不是在生成绑定之前

我意识到我可以生成一次绑定,对生成的文件进行修改,并尝试确保不再构建库绑定项目,但我希望避免维护成本或签入生成的文件。这完全是最后的解决办法

Java代码:

public interface IUpdateListener<T> {
    public void onUpdate(T data);
}
公共接口IUpdateListener{
公共无效更新(T数据);
}

//此方法作为实例化的x.y.z.IUpdateListener的成员显式实现
私有类UpdateListener实现IUpdateListener{
@凌驾
public void onUpdate(字节[]数据){
//做一些事情
}
}
由此产生的Xamarin生成的C#代码:

void global::x.y.z.IUpdateListener.OnUpdate(global::Java.Lang.Object)
{
//此行在调用JavaCast时出错
OnUpdate(global::Java.Interop.JavaObjectExtensions.JavaCast(p0));
}
生成的行上出现错误:

Error 362类型“byte[]”不能用作泛型类型或方法“Java.Interop.JavaObjectExtensions.JavaCast(Android.Runtime.IJavaObject)”中的类型参数“TResult”。没有从“byte[]”到“Android.Runtime.IJavaObject”的隐式引用转换。

警告-我们正在使用JAR,而不是生成它们,因此我根本无法更改Java代码

谢谢你的帮助

更新11/10: 我遇到的问题被证实是购买Xamarin的错误,可以在这里找到:

我周围的工作都交给了我

当我将变通方法添加到元数据文件中时,我得到了一个更易于管理的错误,即那些使用byte[]implementations
更新的类没有实现接口成员foo.bar.IUpdateListener.OnUpdate(Java.Lang.Object)
,这是人们所期望的,因为它们没有实现

然后,我能够在additions文件夹中创建分部类,实现
OnUpdate(Java.Lang.Object)
方法,执行显式转换,并从实际代码调用生成的OnUpdate。此方法没有错误或警告

我想确实没有一个好的方法来执行对生成代码的实际重写,但是我能够解决引发原始问题的问题

// This method is explicitly implemented as a member of an instantiated x.y.z.IUpdateListener
private class UpdateListener implements IUpdateListener<byte[]> {
    @Override
    public void onUpdate(byte[] data) {
       //Does some stuff
    }
}
void global::x.y.z.IUpdateListener.OnUpdate (global::Java.Lang.Object p0)
{
    // This line has an error with the call to JavaCast
    OnUpdate (global::Java.Interop.JavaObjectExtensions.JavaCast<byte[]>(p0));
}