将值从方法解析到另一个方法JNI(C ++)

时间:2019-02-28 18:26:24

标签: java-native-interface

是否可以像这样调用另一个方法?

JNIEXPORT void JNICALL Java_A(JNIEnv *env, jobject obj) {
    int h = 0; 
    Java_B();
}

JNIEXPORT void JNICALL Java_B(JNIEnv *env, jobject obj) {
    h++;
}

我知道代码没有意义,但是原理还可以吗?

1 个答案:

答案 0 :(得分:2)

不是完全这样,因为函数Java_A()试图使用不匹配后者参数的参数列表来调用Java_B()。但是,问题似乎在于,一个本机方法实现是否可以直接调用另一个本机方法实现,是的,就像它可以调用它可以访问的任何其他C函数一样。没有内在的方法可以阻止这种情况。

但是,这样的调用的语义并不等同于在同一个Java对象上调用(本机)方法的语义,无论是从Java还是通过JNI本身。例如,直接调用会绕过该方法的任何Java端同步,并且它不是多态的。此外,在直接呼叫的情况下,您只能同时分配两个功能的本地引用。可能还有其他类似的考虑因素。