如何为嵌套Object作为jni中的参数的方法指定方法签名

时间:2018-03-15 16:58:38

标签: java java-native-interface

我有一个通过jni调用本机函数的java类.java类包含以下方法。

public void indexToEs(ArrayList<LinkedHashMap <String , Object>> list) throws IOException 
    {
            IndexingLogDataToES indexingobj = new IndexingLogDataToES();
            indexingobj.indexLogData(list , logName, client);
    }

现在我应该如何指定方法签名以便在我的本机函数中获取此方法的方法Id。 我尝试了以下但它没有工作。我得到方法ID为null。

jmethodID indexMethod = env->GetMethodID(callingClass , "indexToEs" , "(Ljava/util/ArrayList(Ljava/util/LinkedHashMap;);)V");
    if( indexMethod == NULL )
    {
        cout << "index method not found" << endl ;
        return ;  
    }
    else cout << "index method found" << endl ;

调用类是对类调用的引用。我该怎么做。谢谢。

1 个答案:

答案 0 :(得分:1)

由于type erasure 类型参数不会被编译到类文件中。

因此,方法void indexToEs(ArrayList<LinkedHashMap<String,Object>>)void indexToEs(ArrayList)方法具有相同的签名。

这意味着,方法签名仅为(Ljava/util/ArrayList;)V,您应该调用

env->GetMethodID(callingClass , "indexToEs" , "(Ljava/util/ArrayList)V");