是否可以像这样调用另一个方法?
JNIEXPORT void JNICALL Java_A(JNIEnv *env, jobject obj) {
int h = 0;
Java_B();
}
JNIEXPORT void JNICALL Java_B(JNIEnv *env, jobject obj) {
h++;
}
我知道代码没有意义,但是原理还可以吗?
答案 0 :(得分:2)
不是完全这样,因为函数Java_A()
试图使用不匹配后者参数的参数列表来调用Java_B()
。但是,问题似乎在于,一个本机方法实现是否可以直接调用另一个本机方法实现,是的,就像它可以调用它可以访问的任何其他C函数一样。没有内在的方法可以阻止这种情况。
但是,这样的调用的语义并不等同于在同一个Java对象上调用(本机)方法的语义,无论是从Java还是通过JNI本身。例如,直接调用会绕过该方法的任何Java端同步,并且它不是多态的。此外,在直接呼叫的情况下,您只能同时分配两个功能的本地引用。可能还有其他类似的考虑因素。