做毕设好的网站/竞价排名
新创建的枚举类型继承自Enum类。
Enum类有两个成员变量,name和ordinal。name为枚举常量的名字,ordinal为枚举常量声明时的顺序(从0开始)。Enum类有一个ordinal()方法,用来获取变量ordinal的值;还有一个values()方法用来获取所有的枚举常量,返回值是一个枚举的数组。
JAVA的枚举类型构造函数一定是私有的,因为要保证枚举是单例的。因此我们不能在JNI里使用AllocObject、NewObject这种需要用到构造函数的方法构建一个枚举型。JAVA枚举类型的成员都是static的,JNI中可以直接访问
- java enum
package mdw.appencrypt;/*** 设备状态*/
public enum DeviceState {/*** 设备不存在*/DEVICE_ABSENT_STATE(0x00000000),/*** 设备存在*/DEVICE_PRESENT_STATE(0x00000001),/*** 设备状态未知*/DEVICE_UNKNOW_STATE(0x00000002);public int value;DeviceState(int value) {this.value = value;}public int getValue() {return value;}/*** 自定义了一个static方法,获取指定顺序的枚举*/public static DeviceState getDeviceState(int code) {for (DeviceState e : DeviceState.values()) {if (e.getValue() == code) {return e;}}return null;}}
- JNI 调用
jobject generateDeviceState(JNIEnv* env, jint pulDevState){// FindClass查找Java中的类jclass myClass = env->FindClass("mdw/appencrypt/DeviceState");// 通过GetMethodID获取类的静态成员ID ,第一个参数是一个Java类;第二个参数是使用UTF-8编码的属性名;第三个参数是使用UTF-8编码的属性类型签名。// jmethodID id = env->GetMethodID(myClass, "ordinal", "()I");// 通过GetStaticMethodID获得一个静态方法ID。该方法与GetMethodID方法的参数都是一样的。jmethodID j_method_getDeviceState = env->GetStaticMethodID(myClass,"getDeviceState","(I)Lmdw/appencrypt/DeviceState;");// 通过CallStaticObjectMethod调用了一个我们自定义的静态方法,返回值是一个类的实例jobject jobjectDeviceState = env->CallStaticObjectMethod(myClass,j_method_getDeviceState,(int)pulDevState);//释放资源env->DeleteLocalRef(myClass);return jobjectDeviceState;
}
参考:https://blog.csdn.net/Zhou2828/article/details/89379470