jclassからjobjectを取得する方法があるのだろうか? JNIEnvのGetObjectClass(オブジェクト)呼び出しからjclassを取得できますが、jclassからそのjobjectを取得する場所を見つけることができません。私の実装では、NewGlobalRef()関数を使用してjclassインスタンスをキャッシュしますが、新しいスレッドでは、MethodIDを調べるためにjobjectが必要です。私が仕事を得る方法はありません。代わりにjobjectをキャッシュしてしまいました。Jclassのjclassからjobjectを取得
1
A
答えて
1
クラスとオブジェクトの間に1:1の関係がないため、逆マッピングを行うことはできません。 jclass
はタイプを表し、jobject
はインスタンスを表します。
したがって、からjclass
を取得することは、「インスタンスの種類を特定する」という意味であるためです。しかし、逆の操作は関係ありません。特定の型のインスタンスが複数存在する場合や、指定されたクラスのインスタンスが存在しない場合もあります。
非スタティックメソッドを呼び出す必要がある場合は、jobject
への参照を覚えておく必要があります。
関連する問題
- 1. jobject配列からJclassまたはjobjectを取得します。JNI
- 2. CodeModelでClassOutline/JClass/CClassの役割は何ですか?
- 3. CodeModelでAssert JClassを入手するには?
- 4. JObject内のSeq値に基づいてJObjectを取得
- 5. JObjectを使用してJSONからデータを取得する
- 6. JObjectから値を取得する方法
- 7. 動的にJObjectからプロパティをプログラムで取得する方法
- 8. jni jobjectArrayからjobjectにアクセスする
- 9. Enumerable + WhereSelectEnumerableIterator`2エラーとLINQ文を使用してJObjectの値を取得する
- 10. JSON.NetのJObjectをT
- 11. JObjectをJObjectまたはJArrayのいずれかに解析する
- 12. JObjectから.NETへのオブジェクトを逆シリアル化する方法
- 13. JObjectとExpandoObject
- 14. JSONPathからJObjectを構築してください
- 15. JObjectからIronPython辞書を作成する
- 16. Json.net:[WebMethod]からJObjectを返すにはどうしたらいいですか?
- 17. Superpowered NDK Android:intが "extern"ブロックで成功し、呼び出された関数が失敗する
- 18. 引数例外JOBJECT
- 19. JObjectのYamlDotNetへのシリアライゼーションエラー
- 20. AImageReaderから取得した画像から生データを取得
- 21. JObjectを反復する
- 22. ハスケルの価値を取得するどちらかからモナドを取得
- 23. Firebaseから取得
- 24. JNI関数を解決できませんでした:Android ndk
- 25. 親からiframeからinnerTextを取得
- 26. クエリからデータベースからデータを取得
- 27. Androidからブラウザからテキストを取得
- 28. JavaScriptからURLからコンテンツを取得
- 29. JNIを使用してCでjobjectの文字列値を取得する方法は?
- 30. URLからアクセストークンを取得
私の場合、jclassはjobjectインスタンスへの参照である必要があります。私は最初にjclassをjobjectインスタンスから取得しました。それで、逆のキャストを行うことができるはずだと思いました。 C++のように、CBase由来の* pCBaseと* pCConcreteを持っていれば、pCBase =(CBase *)pCConcreteとpCConcrete =(CConcrete *)pCBaseを行うことができます。 – mdang
私の前のコメントから引き続き。 (私は誤ってエンターキーを押す)。私には分かりにくいのは、非静的メソッド呼び出しを行うには、メソッドIDを取得するためにjclassが必要ですが、メソッド呼び出しを行うためには、私はjobjectをパラメータの1つとして必要とします。アプリがクラッシュするので、私はちょうどどちらかを使うことができませんでした。今、私はjobjectを保持し、常にGetObjectClassを呼び出す必要がありますし、refテーブルが塗りつぶされないようにDeleteLocalRefを呼び出す必要があります。あなたが言うことがJNIの行動であるなら、私はこれに固執しています。 – mdang
jclassは、jobjectインスタンスへの参照ではありません。 jclassはJavaクラス 'Class'のインスタンスです。 C++にはjclass/Classのようなものがあります。最も近いC++のメカニズムはtypeid/type_infoです。これはJNI固有のルールではありません。これは一般的なOOPメカニズムです。非静的メソッドを呼び出すにはインスタンス(jobject)を、静的メソッドを呼び出すには型(jclass)を知る必要があります。 Java(とJNIも同様)は、インスタンス(オブジェクトからのクラス)から型を取得することを可能にしますが、逆のマッピングは(私が推測するどんな言語でも)不可能です。 –