4

Javaで定義された基本クラスがあります。次のようにネイティブ メソッドを呼び出したいと思います。

public class Base<T>
{
    public void doSomething()
    {
        nativeDoSomething();
    }

    private native void nativeDoSomething();
}

私の質問は、ジェネリック クラスの jni メソッド シグネチャを指定するにはどうすればよいですか?

4

3 に答える 3

4

遅くなりましたが、今後の参考にさせていただきます。

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

于 2015-12-15T04:37:53.637 に答える
3

javahジェネリックを無視しているようです:

JNIEXPORT void JNICALL Java_Base_nativeDoSomething
   (JNIEnv *, jobject);
于 2013-09-05T23:49:33.757 に答える