java - 如何从 JNI 返回枚举

标签 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 

}

我希望 native 方法“nativeGetStatus”返回此枚举值。

JNI 返回整数并与 java 中的枚举值进行比较是一种选择,但想知道是否可以通过 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;

关于java - 如何从 JNI 返回枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30414677/

相关文章:

java - 如何合并、创建标签并按升序排列更多 RSS 提要链接的提要,如 Yahoo Pipes 上的提要?

java - 手动加载 native 库以规避限制性环境

java - 对象枚举总是返回空值

c# - 使用映射到数据库中某些种子数据的枚举是不好的做法吗?

java - 使用来自 JNI 的 jvm.h

java - android studio 使用JNI 构建c/c++,但c/c++ 需要另一个lib.a,如何解决

java - 为什么原始数组不允许添加到 GSON 中的 JSON 结构

Java 泛型 : List<Container<? >> = new LinkedList<Container<Double>>() 被禁止?

java - NoClassDefFoundError:servlet 中的antlr/RecognitionException 但在正常的java 程序中工作

c - 为什么标准规定 C 中的结构、枚举和 union 标签有三种可能的 namespace ,而实际上只有一种?