如何从JNI返回枚举

时间:2012-06-27 11:34:27

标签: 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 = nativeGetStatus(); //returns enum 

}

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

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

2 个答案:

答案 0 :(得分:42)

我努力接受已接受的答案,因为我暂时无法弄清静态字段的签名。所以这里的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;

答案 1 :(得分:0)

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