Iniziare a utilizzare JNI per richiamare metodi java statici da C++. In particolare, dopo aver ottenuto un jclass (utilizzando FindClass) e un jmethodID (utilizzando GetStaticMethodID), ho proceduto a chiamare la serie di routine CallStatic * MethodA. Risulta che tutte queste routine prendono un jclass come primo parametro. Ho iniziato a chiedermi perché è necessario l'oggetto classe: poiché tutte le informazioni sono state fornite in GetStaticMethodID, l'oggetto classe non sembra necessario affinché JVM possa svolgere il lavoro. Ho quindi provato a chiamare queste routine passando NULL per il primo parametro e l'invocazione è riuscita.JNI Richiamo dei metodi statici. L'oggetto di classe è necessario?
La mia domanda: è sicuro chiamare questi metodi con un oggetto di classe NULL?
L'incentivo è: se è effettivamente legale, non dovrò memorizzare nella cache l'oggetto di classe per le chiamate successive ai metodi statici (ricordando di chiamare NewGlobalRef ....). La memorizzazione nella cache di jmethodID sarebbe sufficiente.
Dalvik [non utilizza il parametro jclass] (https://android.googlesource.com/platform/dalvik.git/+/android-4.2.2_r1/vm/Jni.cpp) in 'CallStatiC## _ jname ## Method', quindi appare come se passare 'NULL' sarebbe ok. Tuttavia non posso dire nulla di altre JVM. – Michael
La specifica JNI dice che è necessario, quindi è necessario. Non scriverei codice che dipende da una stranezza di una JVM specifica. – EJP
Funziona solo perché il metodo statico non chiama altri metodi statici della stessa classe, né utilizza variabili di classe statiche! – Christophe