我在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实现的,基本上是:泛型仅存在于compile-time:它们在那之后就消失了,而不存在于run-time。
这意味着,即使您可以拥有类似 的方法public native void blah(E genericOne, F genericTwo),但在编译时,它实际上会转换为public native void blah(Object genericOne, Object genericTwo).
这样,在使用 Java 原生接口时,您甚至不需要关心泛型:所有内容都转换为Object.,因此您可以简单地将它们引用为jobject.
Java 类也是如此:您可以简单地将它们引用为jclass.
javah似乎忽略了泛型:
JNIEXPORT void JNICALL Java_Base_nativeDoSomething
   (JNIEnv *, jobject);
与javah. 当有一个工具可以为你做这件事时,不要试图自己弄清楚。