簡體   English   中英

您將如何從 JNI 的本機端調用將 lambda 作為參數的 Java 方法?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM