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) から始めて、 cached を使用することもできmap <jclass, jmethodID>
ます。ただし、jclass
同じクラスでも参照が異なる可能性があるため、これもおそらく機能しません。
最適化ソリューションはありますか?