如何从JNI返回枚举

在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返回值并将其直接分配给状态? 如果有,怎么样?

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

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

ENUM不是java中的原始数据类型,而是特定于java的数据类型。 有一组特定的java数据类型可以映射到本机代码。 检查此链接是否支持所有类型。

对于您的情况 ,您需要将本机方法包装在另一个方法中,该方法将从本机方法返回的数据转换为Java Enum。