2013-10-16 49 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中“流利”,请从简单的目标开始。