Javaで定義された基本クラスがあります。次のようにネイティブ メソッドを呼び出したいと思います。
public class Base<T>
{
public void doSomething()
{
nativeDoSomething();
}
private native void nativeDoSomething();
}
私の質問は、ジェネリック クラスの jni メソッド シグネチャを指定するにはどうすればよいですか?
Javaで定義された基本クラスがあります。次のようにネイティブ メソッドを呼び出したいと思います。
public class Base<T>
{
public void doSomething()
{
nativeDoSomething();
}
private native void nativeDoSomething();
}
私の質問は、ジェネリック クラスの jni メソッド シグネチャを指定するにはどうすればよいですか?
遅くなりましたが、今後の参考にさせていただきます。
Java のジェネリックはType Erasureを使用して実装されます。これは基本的に次のとおりです。ジェネリックはコンパイル時にのみ存在し、その後は実行時に存在しません。
これは、 のようなメソッドを持つことができても、public native void blah(E genericOne, F genericTwo)
コンパイルすると、実際には に変換されることを意味しますpublic native void blah(Object genericOne, Object genericTwo)
。
この方法では、Java Native Interface を使用するときにジェネリックを気にする必要さえありません。すべてが に変換されるためObject
、単純に として参照できますjobject
。
同じことが Java クラスにも当てはまります。単純に として参照できますjclass
。
javah
ジェネリックを無視しているようです:
JNIEXPORT void JNICALL Java_Base_nativeDoSomething
(JNIEnv *, jobject);