【问题标题】:how can I get method id for a function returning a generic type in jni?如何获取在 jni 中返回泛型类型的函数的方法 ID?
【发布时间】:2015-02-02 23:05:37
【问题描述】:
    jclass queueCls = (jclass)(*env)->FindClass(env, "java/util/concurrent/LinkedBlockingQueue");
    if(queueCls == NULL) {
        LOGE("can not get class for blocking queue");
                return;
    }
    jmethodID take = (*env)->GetMethodID(env, queueCls, "take",
            "()[B");
    if (take == NULL) {
        LOGE("can not get take method for blocking queue");
        return;
    }

take 的值始终为 NULL。见this。我正在使用LinkedBlockingQueue<byte[]>

如果提供任何示例,请欣赏。

【问题讨论】:

  • 试试"()Ljava/lang/Object;"

标签: android android-ndk java-native-interface


【解决方案1】:

看看this的回答。

您应该将LinkedBlockingQueue<byte[]> 对象视为JNI 端的简单LinkedBlockingQueue,因为Java 泛型 是在编译时解析的。

我建议您使用 javah 从编译的类开始生成具有正确 JNI 签名的正确本机头文件。

【讨论】:

  • 是的,我将队列视为一个简单的“对象”,并在运行时将返回值转换为 jbyteArray。谢谢您提供的信息
猜你喜欢
  • 2011-05-11
  • 2019-12-22
  • 2021-06-16
  • 1970-01-01
  • 1970-01-01
  • 2018-10-04
  • 1970-01-01
  • 2016-12-24
  • 1970-01-01
相关资源
最近更新 更多