当使用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已关闭并且我无法更改实现,因此我唯一可以做到这一点的方法是在内部类中实现接口及其"覆盖"方法。这对我来说似乎很不切实际。
我可以从匿名类(例如mPlayer字段)访问非静态成员,但是在C#中这是不可能的。
在 Xamarin 中创建 Java 绑定项目时,是否有另一种方法允许这样做?有没有更好的方法来处理生成的类?
谢谢你的帮助。佛瑞德
除了在 InitializationObserver 实现中添加 Player 字段并将其作为构造函数参数传递之外别无他法(这实际上是 java 在幕后为匿名类所做的)。有时,当您只需要一种方法时,您可以实现包装器或扩展方法(例如方法),并使用 lambda 和字段闭包将实现传递给 java 接口实现。