use*_*951 5 java java-native-interface enums
如何从JNI 设置 Java enum字段?这是示例代码.我想在本机函数"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?
}
Run Code Online (Sandbox Code Playgroud)
因为它是一个嵌套的枚举类,所以 STATE 是隐式静态的。有很多资源,但可以在此处找到准确说明这一点的 Google 搜索:http : //www.javapractices.com/topic/TopicAction.do?Id=1
这允许在 enum 类的 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);
Run Code Online (Sandbox Code Playgroud)