2010-03-29 54 views

回答

2

我知道這個問題是舊的,但...

要找到一類的你陣列,使用:

env->FindClass("[[Lmy/package/MyClass;") 
+0

其實這也是不正確的,它最後還需要';'(如Rob的評論)。 – 2013-05-14 13:16:42

+0

@DanBerindei:是的,錯過了,糾正了 – 2013-05-14 16:50:03

1

上JNI有點生疏,但有幾樣事情:你的全類名

呼叫FindClass(),使用「/」作爲分隔符,而不是點。所以,舉例來說,如果你的類是"my.package.MyClass",你會打電話env->FindClass("my/package/MyClass")

既然你有你的對象類型的二維數組,你需要調用env->GetObjectArrayElement()兩次;一次得到一排,另一次得到一個獨特的元素。那麼你可以在該元素上調用env->IsInstanceOf()。確保你查找正確的簽名,這些JNI調用,我已經離開了他們作爲一個練習留給讀者:)

+0

的問題是,我不知道如果我的目標是即使一個數組,和JNI規範甚至不說,如果我嘗試調用GetObjectArrayElement的對象上會發生什麼這不是一個數組。我當然不能依靠C++來告訴我,我不能將jobject轉換爲jobjectArray。 – 2010-03-30 07:33:09

+0

您可以調用GetObjectClass()來獲取對象的類。在你上面的例子中,它會返回「[LMyClass;」 如果該類包含在一個包中,該名稱將完全限定爲「/」而不是點(即「[Lmy/package/MyClass;」) – 2010-03-30 08:11:28

+1

確實,但我不想獲得該類,然後獲取名稱,然後比較每次調用中的字符串。我想我的情況最好的解決方案是在第一個JNI調用中創建一個數組並緩存它的類,以便我可以對其執行IsInstanceOf。 – 2010-03-31 08:10:11

相關問題