从JNI创建Java枚举
我遇到了各种各样的答案,这些答案与我试图做的事情大致相同,但都不尽相同,感谢您的帮助 我有一个包作用域java枚举,我想将它作为arguemnt传递给java方法,但找不到直接从JNI创建它的方法。这可能吗 以下是代码的框架: MyEnum.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
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);