是的,C# 可以調用 Java 并實現回調。為了實現這一點,你需要使用一個通用的接口來在 C# 和 Java 之間傳遞數據和方法。這里是一個簡單的示例,展示了如何使用 C# 調用 Java 類并使用回調:
// JavaClass.java
public class JavaClass {
public interface Callback {
void onResult(String result);
}
public void doSomething(Callback callback) {
// 執行一些操作...
String result = "Hello from Java!";
callback.onResult(result);
}
}
javac JavaClass.java
jar cvf JavaClass.jar JavaClass.class
Java.Interop 庫加載 Java 類并調用其方法。首先,確保在項目中添加了 Java.Interop NuGet 包。然后,創建一個回調接口并在 C# 代碼中使用它:using System;
using Java.Interop;
// 定義一個與 Java 回調接口相對應的 C# 接口
public interface ICallback {
void OnResult(string result);
}
public class Program {
public static void Main() {
// 加載 Java 類
var env = JniEnvironment.Create();
var clazz = env.FindClass("JavaClass");
// 創建 Java 對象
var javaObject = env.NewObject(clazz, "JavaClass");
// 創建 C# 回調對象
ICallback callback = new CallbackImpl();
// 將 C# 回調對象傳遞給 Java 方法
env.CallVoidMethod(javaObject, "doSomething", callback);
// 在 C# 中處理回調結果
callback.OnResult("Hello from Java!");
}
}
// 實現 C# 回調接口
public class CallbackImpl : ICallback {
public void OnResult(string result) {
Console.WriteLine($"Callback result: {result}");
}
}
在這個示例中,我們首先創建了一個 Java 類 JavaClass,其中包含一個回調接口 Callback。然后,我們在 C# 中創建了一個與 Java 回調接口相對應的接口 ICallback,并實現了它。最后,我們加載了 Java 類,創建了一個 Java 對象,并將 C# 回調對象傳遞給 Java 方法。當 Java 方法完成執行時,C# 回調將被調用,我們可以在其中處理結果。