Conversión entre Tipos Java y Tipos Nativos

En está página aprenderemos como referenciar los tipos Java en nuestro método nativo. Se necesitará referenciar a los tipos Java cuando queramos:

Tipos Primitivos de Java

Nuestros método nativo puede acceder directamente a los tipos primitivos de Java, como booleans, integers, floats, etc., que sean pasados desde programas escritos en lenguaje Java. Por ejemplo, el tipo boolean de Java se convierte en el tipo jboolean en el lenguaje nativo (representado como 8 bits sin signo), mientras que el tipo float de Java se convierte en el tipo jfloat en el lenguaje nativo (representado por 32 bits). La siguiente tabla describe las conversiones entre los tipos primitivos de Java y los tipos nativos.
Tipos Primitivos y Nativos Equivalentes
Tipo JavaTipo NativoTamaño en bits
boolean jboolean8, unsigned
byte jbyte8
char jchar16, unsigned
short jshort16
int jint32
long jlong64
float jfloat32
double jdouble64
void voidn/a

Tipos de Objetos Java

Los Objetos Java se pasan por referencia. Todas las referencias a objetos Java tienen el tipo jobject. Por conveniencia y para reducir los errores de programación, el JNI implementa un conjunto de tipos que conceptualmente son todos "Subtipos" de jobject, de la siguiente forma:

En nuestro ejemplo Prompt.java, el método nativo getLine:

private native String getLine(String prompt);
toma un String Java como argumento y devuelve un String Java. Su implementación nativa correspondiente tiene el tipo jstring tanto para el argumento como para el valor de retorno:
JNIEXPORT jstring JNICALL 
Java_Prompt_getLine(JNIEnv *, jobject, jstring);
Como se mencionó anteriormente, jstring corresponde al tipo String de Java. Observa que el segundo argumento de Java_Prompt_getLine, que es una referencia al propio objeto, tiene el tipo jobject.

Ozito