2013-10-16 46 views
0

例如,我有一個Java類中:如何所有成員遍歷jobject

public class JniTest { 
    public int member_int_; 
    public int member_int_2_; 
    public boolean member_bool_; 
    public static int member_static_int_ = 90; 
    public String member_str_; 
    void print() {}; 
} 

在JNI,我想每個成員不預先知道他們的名字:

JNIEXPORT void JNICALL Java_com_tencent_qqmail_protocol_JniMethodTest_TestObject(JNIEnv * env, jclass cls, jobject obj) { 

    *for (each member in obj)* { ... } //how to implement ? 

} 
+2

在轉換到JNI之前,您可能想重新考慮您的體系結構以儘可能地在Java端執行操作。這種類型的反射在Java中很容易實現,但是在JNI中很容易出錯,並且可能需要跨越JNI邊界(除非存在一些嚴重的性能限制,否則我會考慮這樣做)。你能編輯你的問題,爲更廣泛的目標提供更多的背景嗎? – technomage

回答

1

入門:Trail: The Reflection API

  1. 方法getDeclaredMethods返回方法對象的數組,不含繼承的方法
  2. 方法getDeclaredFields返回Field對象的數組,但不包括繼承的字段
  3. 方法getSuperclass之返回超類

由於@technomage評論說,做所有的JNI的工作是很難做正確的(特別是如果你不喜歡內存泄漏和崩潰)

如果您尚未在JNI中「流利」,請從簡單的目標開始。