Как вернуть оригинальные элементы jobjectArray? - PullRequest
0 голосов
/ 28 ноября 2011

У меня есть функция 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 параметра I, первый из которых является строкой, второй - двойным, третий и четвертый - целыми числами. Как мне вернуть все четыре параметра в их первоначальном виде.

Ответы [ 2 ]

1 голос
/ 18 июня 2012

JobjectArray не содержит целых, двойных чисел или каких-либо примитивных типов.Содержит объекты.JintArray содержит целые числа и т. Д. Вам нужно переосмыслить свой вопрос.Если вы пытаетесь объявить собственный метод varargs, последний параметр действительно является jobjectArray и содержит объекты.Если ваш Java-код передает значения типа int, double и т. Д., Они преобразуются в Integer, Double и т. Д., Поэтому то, что вы получаете в нативном методе, всегда является объектом.Вы можете запросить класс каждого элемента во время выполнения с помощью обычных вызовов JNI.

0 голосов
/ 19 июня 2012

Если вы объявите метод для получения Object [], который у вас есть, он будет принимать только объекты.Чтобы сделать вам одолжение, Java будет 'autobox' примитивные типы в соответствующие им типы объектов.Если вы напишите whatever(1), вы получите эффект Integer.valueOf(1).

В Java нет способа объявить неординарную функцию, которая принимает примитивные типы.Все бродячие функции принимают объекты того или иного типа.Таким образом, вы не можете получить этот «оригинальный» примитив 1, независимо от того, что вы делаете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...