如何从JNI返回枚举

krt*_*krt 15 java java-native-interface enums

在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 

}
Run Code Online (Sandbox Code Playgroud)

我希望本机方法'nativeGetStatus'返回此枚举值.

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

小智 43

我一直在努力接受已接受的答案,因为我暂时无法弄清静态字段的签名.所以这里的JNI实现应该与上面的例子一起使用(未经测试):

jclass clSTATUS    = env->FindClass("MyClass$STATUS");
jfieldID fidONE    = env->GetStaticFieldID(clSTATUS , "ONE", "LMyClass$STATUS;");
jobject STATUS_ONE = env->GetStaticObjectField(clSTATUS, fidONE);

return STATUS_ONE;
Run Code Online (Sandbox Code Playgroud)


Vla*_*nov -2

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

  • [这就是为什么你永远不应该提供链接作为答案](http://25.media.tumblr.com/d10e5fba3bfbe874fbda2fcd8c2c2415/tumblr_mkvzqac3YX1r55vh6o1_1280.png)。 (55认同)