3

我有来自枚举类型的成员的 c++ 类。我想使用 jni 在 java 中公开此类中的对象。我已经为班上的所有成员成功地完成了它,但是我对 enum 类型的成员有问题。我以这种方式在java中定义了枚举

 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 级别为枚举类型进行映射?

4

1 回答 1

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);

您还可以在此处找到有关静态字段的更多信息

于 2013-11-06T10:35:50.210 回答