代码之家  ›  专栏  ›  技术社区  ›  Dan Berindei

检查JNI中的Java对象是否为数组类型

  •  5
  • Dan Berindei  · 技术社区  · 15 年前

    假设我在Java中有一个MyC类类,有没有一种方法来检查JNI jobject 是一个 MyClass[][] ?

    我最初的想法是 env->IsInstanceOf(myobj, myArrayClass) ,但是打电话 env->FindClass("[MyClass") 抛出一个 NoClassDefFoundError .

    2 回复  |  直到 10 年前
        1
  •  3
  •   Flexo - Save the data dump sunny moon    10 年前

    我知道这个问题由来已久,但…

    要查找数组的类,请使用:

    env->FindClass("[[Lmy/package/MyClass;")
    
        2
  •  1
  •   Rob Heiser    15 年前

    JNI有点生锈,但有两件事:

    呼叫 FindClass() 在完全限定的类名上,使用“/”作为分隔符而不是点。例如,如果您的类是 "my.package.MyClass" ,你会打电话给 env->FindClass("my/package/MyClass")

    由于对象类型是二维数组,因此需要调用 env->GetObjectArrayElement() 两次;一次获取行,另一次获取不同元素。然后你可以打电话 env->IsInstanceOf() 在那个元素上。确保您为这些JNI调用查找正确的签名,我将它们作为练习留给读者:)