Java 子类的JNI FindClass格式?

Java 子类的JNI FindClass格式?,java,java-native-interface,Java,Java Native Interface,加载子类的正确FindClass标识符语法是什么?例如: package a.b.c; class Foo { class Bar { ... } } 要获取Foo我可以做(*env)->FindClass(env,/a/b/c/Foo”),但尝试通过(*env)->FindClass(env,“a/b/c/Foo/Bar”)获取条抛出一个ClassNotFoundException。有不同的语法来表示子类吗?没关系,javap工具在这里证明很有用。正确的语法是: a/

加载子类的正确FindClass标识符语法是什么?例如:

package a.b.c;

class Foo {
   class Bar {
     ...
   }
}

要获取
Foo
我可以做
(*env)->FindClass(env,/a/b/c/Foo”)
,但尝试通过
(*env)->FindClass(env,“a/b/c/Foo/Bar”)获取
抛出一个
ClassNotFoundException
。有不同的语法来表示子类吗?

没关系,
javap
工具在这里证明很有用。正确的语法是:


a/b/c/Foo$Bar

这是一般原则。您应该始终使用
javap
,而不是试图找出答案。JNI方法和类型签名是
javap
知道正确答案的另一个例子。除了在这种情况下,我尝试在转换任意代码时执行此操作,因此启动
javap
并尝试匹配输出将不起作用。我不明白这一点。您的问题是否比您所问的更多?问题的重点是发现这些标识符的通用语法,以便在遍历解析树时创建它们。在每个文件上运行javap并尝试匹配签名充其量是很麻烦的,所以我正在寻找标识符的“公式”,不包括匿名类。它似乎是“pa.cka.ge.Outer$Middle$internal”。还要注意的是,对于非静态嵌套类(内部类),构造函数接受外部类的一个附加参数,使签名与它看起来的不同。在这个例子中,它将是“(La/b/c/Foo;)V”。当然,javap在调试这方面也很有帮助:)