3

列挙型のメンバーを持つ C++ クラスがあります。jni を使用して Java でこのクラスのオブジェクトを公開したいと考えています。クラスのすべてのメンバーに対して成功しましたが、列挙型メンバーに問題があります。このように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 に答える