在构建这个类之前,我做了一些小的修改。
public class A {
public enum STATE {
STATE_ONE,
STATE_TWO
}
public native void get_state(B b);
public B getB() {
B b = new B();
// Call JNI to get the state
get_state(b);
return b;
}
public static class B {
public STATE myState = STATE.STATE_ONE;
}
}
所以我们开始吧。第一步是构建java类
javac A.java
所以我们得到了一个 A.class 文件。
第二,生成签名。
javap -v A
外壳打印以下内容:
C:\Users\bowman\Desktop\project>javap -v -p -c A
Classfile /C:/Users/bowman/Desktop/project/A.class
Last modified 2014-1-3; size 377 bytes
MD5 checksum f331eddf740b0d8c256c851f04369088
Compiled from "A.java"
public class A
SourceFile: "A.java"
InnerClasses:
public static #7= #2 of #5; //B=class A$B of class A
public static final #10= #9 of #5; //STATE=class A$STATE of class A
minor version: 0
major version: 51
flags: ACC_PUBLIC, ACC_SUPER
Constant pool:
#1 = Methodref #6.#21 // java/lang/Object."<init>":()V
#2 = Class #22 // A$B
#3 = Methodref #2.#21 // A$B."<init>":()V
#4 = Methodref #5.#23 // A.get_state:(LA$B;)V
#5 = Class #24 // A
#6 = Class #25 // java/lang/Object
#7 = Utf8 B
#8 = Utf8 InnerClasses
#9 = Class #26 // A$STATE
#10 = Utf8 STATE
#11 = Utf8 <init>
etc...
要点是:
公开课A
源文件:“A.java”
内部类:
公共静态 #7= #2 的 #5; //B=A 类的 A$B 类
公共静态最终 #10= #9 of #5; //STATE=class A$STATE 类 A
所以我们可以推断枚举是一个具有“A$STATE”签名的类
您可以通过以下方式在 cpp 中获取此类:
jclass A_State = env->FindClass( "LA$STATE;");
希望能帮助到你。