Java 如何从JNI返回枚举

Java 如何从JNI返回枚举,java,enums,java-native-interface,Java,Enums,Java Native Interface,在java中,我有: public class MyClass{ public enum STATUS { ZERO, ONE , TWO } public native STATUS nativeGetStatus(); ... private STATUS state = nativeGetStatus(); //returns enum private STATUS state2 = n

在java中,我有:

public class MyClass{

    public enum STATUS {
        ZERO,
        ONE ,
        TWO
    }

    public native STATUS nativeGetStatus();

    ...

    private STATUS state = nativeGetStatus(); //returns enum
    private STATUS state2 = nativeGetStatus(); //returns enum 

}
我希望本机方法“nativeGetStatus”返回此枚举值


JNI返回整数并和java中的枚举值进行比较是一个选项,但想知道是否可以通过jobject返回值并直接将其分配给state?如果是,怎么做?

当然可以。Enum值是Enum类的公共静态字段,因此可以使用官方手册编写代码。只需从JNI获取字段,并将其作为jobject返回。

我很难找到可接受的答案,因为有一段时间我无法确定静态字段的签名。下面是应该与上述示例一起使用的JNI实现(未经测试):


您是否指向访问字段“state”并将其作为jobject返回?很抱歉,我没有在我的原始帖子中提到,可能会有多个字段被指定为nativeGetStatus的返回值。在这种情况下,“只需从JNI获取字段并将其作为jobject返回”可能不起作用。不,我的意思是一个类状态的静态字段。您可以访问它并从JNI..+l返回,以获得awesome tumbler linkI。我有一个具有内部枚举的类,此示例帮助我使用“LClass$InternalEnum;”指定枚举类型的对象。谢谢!谢谢这个答案帮助了我。对于像我这样不太熟悉Java和JNI的人,请注意:您必须在FindClass和GetStaticFieldID中指定名称中的类包,例如“com/example/MyClass$STATUS”。您可以将JNI作为Int值传递。参见示例。
jclass clSTATUS    = env->FindClass("MyClass$STATUS");
jfieldID fidONE    = env->GetStaticFieldID(clSTATUS , "ONE", "LMyClass$STATUS;");
jobject STATUS_ONE = env->GetStaticObjectField(clSTATUS, fidONE);

return STATUS_ONE;