在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返回值并将其直接分配给状态?如果是的话怎么样?
答案 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返回。