【问题标题】:exposing enum native type to java through jni?通过jni将枚举本机类型暴露给java?
【发布时间】:2013-11-05 15:52:17
【问题描述】:

我有 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 级别为枚举类型进行映射有什么建议吗?

【问题讨论】:

    标签: java android c++ android-ndk java-native-interface


    【解决方案1】:

    枚举值基本上是枚举类中的静态字段。

    例如,您可以在 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

    【讨论】:

      猜你喜欢
      • 2011-02-07
      • 2021-09-18
      • 1970-01-01
      • 2021-05-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-08
      相关资源
      最近更新 更多