在Java中,我有一个接口:
public interface I {...}
声明一个函数void f()
和一些类:
public class A implements I {...}
public class B implements I {...}
public class C implements I {...}
...
我经常调用原生函数:
public native void nativeFunc(I obj);
在 C++ 中,我获得了一个
jobject jobj
目的是调用
jobj.f();
无需每次都通过链条
cls = jenv->GetObjectClass(jobj); (1)
mid = jenv->GetMethodID(cls, "f", "()V"); (2)
jenv->CallVoidMethod(jobj, mid); (3)
我似乎无法mid
在本机调用之间进行缓存。作为另一个建议,我可以从第 (1) 行开始,然后使用缓存的map <jclass, jmethodID>
. 但是,这也可能不起作用,因为jclass
同一类的引用可能不同。
有没有优化的解决方案?