18

在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 返回值并将其直接分配给 state ?如果是的话怎么办?

4

2 回答 2

52

我为接受的答案而苦苦挣扎,因为我有一段时间无法弄清楚静态字段的签名。所以这里的 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;
于 2013-07-03T06:30:32.207 回答
0

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

于 2012-06-27T11:38:37.377 回答