我在尝试做的事情时遇到了各种各样的答案,但是没有什么完全一样的,任何帮助表示赞赏...
我有一个包范围的Java枚举,我想将它作为辩解传递给java方法,但找不到直接从JNI创建它的方法。这可能吗?
下面是代码的骨架:
MyEnum.java
package com.a.b;
public enum MyEnum {
VALUE1,
VALUE2,
VALUE3
}
MyClass.java
package com.a.b.c;
import com.a.b.MyEnum;
public class MyClass {
public MyClass(MyEnum value) { ... }
}
是否可以直接从JNI调用MyClass构造函数? (如果我删除枚举,则调用构造函数没有问题,即传递一个String并让Java代码进行转换,但无法解决该问题)。
答案 0 :(得分:1)
这很简单。每个枚举值都是MyEnum
类型的静态字段:
jclass myenum_clazz = env->FindClass("com/a/b/MyEnum");
jfieldID value2_fid = env->GetStaticFieldID(myenum_clazz, "VALUE2", "Lcom/a/b/MyEnum;");
jobject value2 = env->GetStaticObjectField(myenum_clazz, value2_fid);
...
jobject myclass = env->NewObject(myclass_clazz, myclass_init, value2);