Я пытался построить собственный метод и, хотя он, кажется, прекрасно работать, но я изо всех сил, чтобы понять поле [* значи] в функции -Разъяснение о GetFieldID
jfieldID GetFieldID(JNIEnv *env, jclass clazz,
const char *name, const char *sig);
https://docs.oracle.com/javase/8/docs/technotes/guides/jni/spec/functions.html
Например, у меня есть небольшой код Java, который использует переменную экземпляра, называемую «i», и все эти собственные методы (с именем test) умножают это на 2.
Теперь я имею в виду Java Complete Reference - здесь код идет как -
Мой вопрос: что такое «я» в этом - fid = (* env) -> GetFieldId (env, cls, "i", "I");
Когда я прочитал Oracle documenttion он говорит - https://docs.oracle.com/javase/8/docs/technotes/guides/jni/spec/functions.html
доступа к полям объектов
GetFieldID
jfieldID GetFieldID(JNIEnv *env, jclass clazz,
const char *name, const char *sig);
Возвращает поле идентификатора для экземпляра (нестатического) поле класс. Поле указано его именем и подписью. Семьи GetField и SetField для функций доступа используют идентификаторы полей для извлечения полей объектов.
GetFieldID() заставляет инициализировать неинициализированный класс.
GetFieldID() не может использоваться для получения поля длины массива. Используйте GetArrayLength() вместо этого.
ССЫЛКИ:
Индекс 94 в таблице функций интерфейса JNIEnv.
ПАРАМЕТРЫ:
env: указатель интерфейса JNI.
clazz: объект класса Java.
имя: имя поля в модифицированной строке UTF-8 с 0-символом.
sig: подпись поля в модифицированной строке UTF-8 с нулевым завершением.
Не могли бы вы объяснить, что это за поле «сиг»? Я не мог связать «я» ни с чем.
#include <jni.h>
#include "NativeDemo.h"
#include <stdio.h>
JNIEXPORT void JNICALL Java_NativeDemo_test(JNIEnv *env , jobject obj)
{
jclass cls;
jfieldID fid;
jint i;
printf("Starting the native method\n");
cls = (*env)->GetObjectClass(env,obj);
fid = (*env)->GetFieldId(env,cls,"i", "I");
Метод JNI или сигнатура поля такого типа - это то, что выводится командой 'javap -s' для этого метода или поля. Не беспокойтесь, пытаясь понять их сами, когда есть инструмент, который сделает это за вас. – EJP