如何与封闭的 Java 绑定 SDK 中将简单接口作为参数的方法进行交互



当使用Xamarin和Java绑定项目时,生成的绑定项目自然遵循java编码风格。 即期望使用匿名类(实现简单的回调接口)作为参数。下面是一个 java 代码的示例:

// Field
private Player mPlayer;
SDKClass.staticMethod(oneObject, anotherObject, new InitializationObserver() { 
    @Override
    public void onInitialized(SomeClass someClass) { 
        // Calls mPlayer
    }
    @Override
    public void OnError (Java.Lang.Throwable Error)
    {
        Console.WriteLine("Error in initialization: " + Error.Message);
    }
}

生成的 C# 代码还需要将InitializationObserver作为第三个参数。但是,由于SDK已关闭并且我无法更改实现,因此我唯一可以做到这一点的方法是在内部类中实现接口及其"覆盖"方法。这对我来说似乎很不切实际。

在java中,

我可以从匿名类(例如mPlayer字段)访问非静态成员,但是在C#中这是不可能的。

在 Xamarin 中创建 Java 绑定项目时,是否有另一种方法允许这样做?有没有更好的方法来处理生成的类?

谢谢你的帮助。佛瑞德

我相信

除了在 InitializationObserver 实现中添加 Player 字段并将其作为构造函数参数传递之外别无他法(这实际上是 java 在幕后为匿名类所做的)。有时,当您只需要一种方法时,您可以实现包装器或扩展方法(例如方法),并使用 lambda 和字段闭包将实现传递给 java 接口实现。

最新更新