我有c ++类,其成员来自枚举类型。我想使用jni在java中公开此类中的对象。我已经成功地为班上的所有成员完成了它,但是我对枚举类型成员有问题。我已经用这种方式在java中定义了enum
public enum Call {
UNDEFINED(-1), INCOMING(1), OUTGOING(2), MISSED(4);
private int type;
private Call(int type) {
this.type = type;
}
public int type() {
return this.type;
}
}
以这种方式在c ++中
enum Call {
UNDEFINED = -1,
INCOMING = 1,
OUTGOING = 2,
MISSED = 4
};
c ++中的原始类是
class LogData{
int _id;
Call _calltype;
long _datetime;
int _duration;
}
在java中
public class LogDataJava{
int _id;
Call _callType;
long _dateTime;
int _duration;
}
有关如何在枚举类型的jni级别进行映射的任何建议吗?
答案 0 :(得分:3)
枚举值基本上是枚举类中的静态字段。
因此,例如,您可以在jni代码中执行以下操作,将其映射到Java
LogData* l = /*...*/
jclass clCall = env->FindClass("LogDataJava$Call");
if (l->_callType == Call.UNDEFINED) {
jfieldID fid = env->GetStaticFieldID(clCall , "UNDEFINED", "LLogDataJava$Call;");
} /* else ....*/
jobject callType = env->GetStaticObjectField(cl, fid);
您还可以找到有关静态字段here
的更多信息