【问题标题】:JNI FindClass format for subclasses?子类的 JNI FindClass 格式?
【发布时间】:2012-03-31 04:05:15
【问题描述】:

加载子类的正确 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") 获得Bar 会抛出ClassNotFoundException。表示子类有不同的语法吗?

【问题讨论】:

    标签: java java-native-interface


    【解决方案1】:

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

    a/b/c/Foo$Bar

    【讨论】:

    • 这是一般原则。您应该始终使用javap,而不是试图弄清楚。 JNI 方法和类型签名是javap 知道正确答案的另一个例子。
    • 除非在这种情况下,我试图在转换任意代码时这样做,因此启动 javap 并尝试匹配输出不会完全有效。
    • 我不明白。你的问题比你问的还多吗?
    • 问题的重点是发现这些标识符的一般语法,以便我可以在遍历解析树时创建它们。在每个文件上运行 javap 并尝试匹配签名充其量是很麻烦的,所以我正在寻找标识符的“公式”,不包括匿名类。它似乎是“pa.cka.ge.Outer$Middle$Inner”。
    • 另请注意,对于非静态嵌套类(内部类),构造函数采用外部类的附加参数,使得签名不是看起来的那样。在本例中,它将是“(La/b/c/Foo;)V”。当然 javap 在调试时也很有帮助:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多