如何获取jobjectArray的原始元素?

时间:2011-11-28 10:12:21

标签: java java-native-interface

我有一个Java函数,它将接收可变数量的参数,在JNI中,我收到jobjectArray中的所有参数。现在我的问题是:如何以原始形式取回参数(它们可以是字符串,双数组,int ......)?

修改(根据评论)

以下是详细信息。这是我的功能声明:

private native double gsl_stats_all_in_one(String...str); 

这是我的函数调用:

variance = this.gsl_stats_all_in_one((String)message.getBody().get("function2"), 
                                     Ar‌​rays.toString(data), "1","5");

这是函数定义:

JNIEXPORT jdouble JNICALL Java_org_bel_MyJMSListenerAction_gsl_1stats_1all_1in_1one (JNIEnv *env, jobject obj, jobjectArray arr) 

现在我的arr拥有所有4个参数,其中第一个是字符串,第二个是double,第三个和第四个是整数。如何以原始形式取回所有四个参数。

2 个答案:

答案 0 :(得分:1)

jobjectArray不包含整数或双精度或任何基本类型。它包含对象。 jintArray包含整数等。您需要重新考虑您的问题。如果您尝试声明本机varargs方法,则最终参数确实是jobjectArray并且它包含对象。如果您的Java代码传递了int,double等,它们将转换为Integer,Double等,因此您在本机方法中收到的内容始终是一个对象。您可以通过常规的JNI调用在运行时查询每个项目的类。

答案 1 :(得分:0)

如果你声明一个方法来获取一个Object [],它就是你所拥有的,它只接受对象。为了帮到你,Java将'autobox'原始类型转换为相应的对象类型。如果你写whatever(1),你将获得Integer.valueOf(1)的效果。

Java中没有办法声明采用原始类型的varadic函数。所有的varadic函数都采用某种或那种对象。所以,无论你做什么,你都无法得到那个“原始的”原始1