Как преобразовать типы объектов Java, такие как Long и Integer, в примитивные типы, такие как long и int - PullRequest
0 голосов
/ 16 мая 2018

Моя подпись метода Java выглядит следующим образом:

public native Long passLong(MyEntity myEntity);  

Затем отображаются:

extern "C"
JNIEXPORT jobject JNICALL
Java_passLong(JNIEnv *env, jobject instance, jobject myEntity) {

    jclass myEntityClazz = env->GetObjectClass(myEntity);
    jmethodID get_myEntityGUID = env->GetMethodID(myEntityClazz, "get_myEntityGUID", "()Ljava/lang/Long;");
    jobject myEntityGUID = env->CallObjectMethod(myEntity, get_myEntityGUID);

    // Convert the Long object to a primitive here

    return myEntityGUID;

}  

Как я могу преобразовать длинный объект Java в примитив C?

Спасибо всем заранее.

MyEntity

public class MyEntity {

    private Long _myEntityGUID;

    public Long get_myEntityGUID() {
        return _myEntityGUID;
    }

    public void set_myEntityGUID(Long _myEntityGUID) {
        this._myEntityGUID = _myEntityGUID;
    }
}

1 Ответ

0 голосов
/ 16 мая 2018

Как можно преобразовать длинный Java-объект в примитив C?

Вызвать его метод longValue().Помните, что вам нужно сначала проверить, является ли объект null, или же быть готовым к обработке NullPointerException (так же, как при использовании автоматического (не) бокса на стороне Java).

Обратите внимание, что тожечто, где это возможно, гораздо проще обрабатывать подобные вещи на стороне Java, чем в JNI.Это не представляется возможным в представленном вами примере, но, возможно, вы могли бы провести рефакторинг так, чтобы нативный метод делал меньше, и, следовательно, не нужно целое MyEntity в качестве аргумента.

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