gpt4 book ai didi

java - 使用 JNI 将 Java Collection 类型转换为 R 对象

转载 作者:行者123 更新时间:2023-12-01 11:05:38 25 4
gpt4 key购买 nike

我有一个 java 方法,它返回 collection<"Integer">我想在R中使用它。java方法如下

public Collection<Integer> search( ){ ....}

使用JNI,R中这个(Java集合)对象的类型应该是什么。我尝试过"[I" ,这意味着一个整数数组,但它不起作用。

最佳答案

Collection<Integer>是通过参数化通用接口(interface) Collection 创建的类型,它允许对 Collection<Integer> 的使用执行一些编译时健全性检查。 .

但是,在运行时, Collection<Integer> 的剩余部分只是 the raw type Collection 。因此,如果您想通过 FindClass 找到合适的类(class)你应该寻找java.util.Collection ,即"java/util/Collection" .

一旦您拥有对该类的引用以及对该类的实例的引用,您就可以使用 toArray Collection中的方法得到一个普通数组 Integer对象,如果这是你想要的。

<小时/>

一个半无意义的小例子(假设您有一个 jobject intColl 引用您的 Collection<Integer> ):

// Get an array of Objects corresponding to the Collection
jclass collClass = env->FindClass("java/util/Collection");
jmethodID collToArray = env->GetMethodID(collClass, "toArray", "()[Ljava/lang/Object;");
jobjectArray integerArray = (jobjectArray) env->CallObjectMethod(intColl, collToArray);

// Get the first element from the array, and then extract its value as an int
jclass integerClass = env->FindClass("java/lang/Integer");
jmethodID intValue = env->GetMethodID(integerClass, "intValue", "()I");
jobject firstInteger = (jobject) env->GetObjectArrayElement(integerArray, 0);
int i = env->CallIntMethod(firstInteger, intValue);

__android_log_print(ANDROID_LOG_VERBOSE, "Test", "The value of the first Integer is %d", i);

env->DeleteLocalRef(firstInteger);
env->DeleteLocalRef(integerArray);

关于java - 使用 JNI 将 Java Collection<Integer> 类型转换为 R 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32982383/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com