Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

how to return enum from JNI

In java I have:

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 

}

I want native method 'nativeGetStatus' to return this enum value.

JNI returning integer and comparing with value of enum in java is an option, but was wondering is it possible to return value via jobject and assign it directly to state ? if yes how?

like image 760
krt Avatar asked Jun 27 '12 11:06

krt


1 Answers

I struggled with the accepted answer since I couldn't figure out the signature of the static field for a while. So here's the JNI implementation that should work with the example above (not tested):

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

return STATUS_ONE;
like image 156
cweigel Avatar answered Sep 21 '22 15:09

cweigel