java - 如何从 JNI 设置 Java 枚举字段?

标签 java enums java-native-interface

如何从 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/

相关文章:

swift - 将 ENUM 哈希和原始值复制到字典中

java - 转换数组并将其复制到列表中

java - JNI C 反射谜题

android-layout - 单声道 Android : Java Android custom view JNI not calling constructors in xml layout

java - 如何禁用tomcat的https

Java 放气响应

Java - 子类型枚举或子类

java - Pivotal Cloud Foundry - 安全证书

java - 如何不使用我得到的构造函数覆盖参数?

java - JNI传递参数给c++的方法