Java 如何在jni中为嵌套对象作为参数的方法指定方法签名

Java 如何在jni中为嵌套对象作为参数的方法指定方法签名,java,java-native-interface,Java,Java Native Interface,我有一个java类通过jni调用本机函数 public void indexToEs(ArrayList<LinkedHashMap <String , Object>> list) throws IOException { IndexingLogDataToES indexingobj = new IndexingLogDataToES(); indexingobj.indexLogData(list , log

我有一个java类通过jni调用本机函数

public void indexToEs(ArrayList<LinkedHashMap <String , Object>> list) throws IOException 
    {
            IndexingLogDataToES indexingobj = new IndexingLogDataToES();
            indexingobj.indexLogData(list , logName, client);
    }
public void indexToEs(ArrayList列表)引发IOException
{
IndexingLogDataToES indexingobj=新的IndexingLogDataToES();
indexingobj.indexLogData(列表、日志名、客户端);
}
现在,我应该如何指定方法签名,以便在本机函数中获取该方法的方法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 ;
jmethodID indexMethod=env->GetMethodID(调用class,“indexToEs”,“(Ljava/util/ArrayList(Ljava/util/LinkedHashMap;);)V”);
if(indexMethod==NULL)
{
不能因为
类型参数不会编译到类文件中

因此,方法
void indexToEs(ArrayList)
与方法
void indexToEs(ArrayList)
具有相同的签名

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

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

感谢您的回复,我试过了,但仍然得到了空id。不管怎样,这是正确的答案
javap-s callingClass | grep“indexToEs”-一个2 | grep“descriptor”