如何从 JNI 设置 Java 枚举字段?这是示例代码。我想在 native 函数“get_state”中设置我的 B 对象的“myState”字段。
public class A {
public enum STATE {
STATE_ONE,
STATE_TWO
}
public static class B {
public STATE myState;
}
public native void get_state(B b);
public B getB() {
B b;
// Call JNI to get the state
get_state(b);
return b;
}
}
JNIEXPORT void JNICALL Java_A_get_1state(JNIEnv *env, jobject object, jobject b_object)
{
/* Get a reference to obj's class */
jclass cls = (*env)->GetObjectClass(env, b_object);
//How do I set B object's "myState" field?
}
最佳答案
由于它是一个嵌套的枚举类,STATE 是隐式静态的。有很多资源,但是可以在这里找到准确说明的谷歌搜索:http://www.javapractices.com/topic/TopicAction.do?Id=1
这允许在枚举类的 valueOF methodID 之上使用另一种方法。您可以使用 env->GetStaticField 和 env->GetStaticObjectField 获取要设置的枚举。
例如:
jclass theStateClass = env->FindClass("your/containingPackage/A$STATE");
jfieldID stateOneField = env->GetStaticFieldID(theStateClass, "STATE_ONE", "Lyour/containingPackage/A$STATE;");
jobject STATE_ONE = env->GetStaticObjectField(theStateClass, stateOneField);
关于java - 如何从 JNI 设置 Java 枚举字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19793329/