从JNI创建Java枚举

从JNI创建Java枚举,java,java-native-interface,Java,Java Native Interface,我遇到了各种各样的答案,这些答案与我试图做的事情大致相同,但都不尽相同,感谢您的帮助 我有一个包作用域java枚举,我想将它作为arguemnt传递给java方法,但找不到直接从JNI创建它的方法。这可能吗 以下是代码的框架: MyEnum.java package com.a.b; public enum MyEnum { VALUE1, VALUE2, VALUE3 } package com.a.b.c; import com.a.b.MyEnum; public cl

我遇到了各种各样的答案,这些答案与我试图做的事情大致相同,但都不尽相同,感谢您的帮助

我有一个包作用域java枚举,我想将它作为arguemnt传递给java方法,但找不到直接从JNI创建它的方法。这可能吗

以下是代码的框架:

MyEnum.java

package com.a.b;
public enum MyEnum {
   VALUE1,
   VALUE2,
   VALUE3
}
package com.a.b.c;
import com.a.b.MyEnum;
public class MyClass {
  public MyClass(MyEnum value) { ... }
}
MyClass.java

package com.a.b;
public enum MyEnum {
   VALUE1,
   VALUE2,
   VALUE3
}
package com.a.b.c;
import com.a.b.MyEnum;
public class MyClass {
  public MyClass(MyEnum value) { ... }
}

可以直接从JNI调用MyClass构造函数吗?(如果我删除枚举,我可以调用构造函数,也就是说,传递一个字符串并让java代码进行转换,但无法解决如何进行转换)。

这相当简单。每个枚举值都是MyEnum类型的静态字段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);