我有一个传递给本地方法的类,如下所示
public enum Color{
eRED,
eGREEN,
eBLUE};
public class ConfigColor{
public ColorE color;
public int value;};
public native int HelloWord(ConfigColor ConfigColorcls);
ConfigColor clsConfigColor = new ConfigColor();
clsConfigColor .color = eGREEN;
clsConfigColor . value = 255;
HelloWord(clsConfigColor);
我可以使用GetIntField和GetObjectClass提取int value
。但是如何提取ColorE color
?请帮忙
答案 0 :(得分:1)
要获取该值,您可以使用以下
public static Color getFromInt(int id) {
for (Color candidate : Color.values()) {
if (candidate.getAsInt() == id) {
return candidate;
}
}
throw new RuntimeException("no Color " + id);
}
答案 1 :(得分:1)
好吧,我认为你不会得到enum本身,因为JNI支持的类型没有说enum:
http://docs.oracle.com/javase/1.5.0/docs/guide/jni/spec/types.html#wp9502
我认为这很正常,Java枚举非常适合Java。
您可以做的是将您的枚举实例作为对象,调用name()方法,并获得包含您的枚举类型的String(例如“eRED”),然后您可以使用它。如果通过JNI调用的类也是可以访问枚举的Java类,则可以执行以下操作:
ColorEnum colorEnumInstance = ColorEnum.valueOf("eGREEN");
答案 2 :(得分:1)
使用GetObjectClass
获取类对象,然后在其上调用getName()
。您将获得jstring
,例如“eRED”。这是你的枚举,但它可能不是最有用的形式。
或者,考虑将整数与您的枚举相关联:
public enum Color {
eRED(0),
eGREEN(1),
eBLUE(2);
private Color(int numer) {
this.number = number;
}
public final int number; // Maybe a byte would suffice...
}
这类似于C枚举,它实际上只是(命名)整数。然后,您可以直接在C中访问枚举的number
字段,而不是解析字符串。