[英]How would you call a Java method that takes a lambda as an argument from the native side of JNI?
我正在嘗試調用 Java 方法,該方法接受 lambda 作為參數。 我無法控制代碼的 Java 端,並且正在使用調用 API。我什至不知道我將如何開始解決這個問題——根據我的搜索,lambda 是Java 的編譯時語言工件。 這也鏈接了這個答案,它顯示了如何在運行時制作 lambda 。 是否可以在 JNI 中創建 lambda,如果可以,如何將其傳遞到方法調用中?
讓我以LongStream.generate
作為示例目標方法。 它的方法簽名是
static LongStream generate(LongSupplier s);
LongSupplier
是:
@FunctionalInterface public interface LongSupplier {
long getAsLong();
}
您可以在 Java 端實現自己的LongSupplier
,如下所示:
package dummy.pkg;
import java.util.function.LongSupplier;
public class NativeLongSupplier implements LongSupplier {
native public long getAsLong();
}
那么下面的 C++ 代碼會讓你實現getAsLong
方法:
JNIEXPORT jlong Java_dummy_pkg_NativeLongSupplier_getAsLong(JNIEnv * env, jobject obj) {
static uint64_t counter = 0;
return ++counter;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.