3

在 Java 中,我有一个具有本机方法的内部类:

public class A {
    class B {
        public native void foo();
    }
}

本机方法在 JNI 中实现:

JNIEXPORT void JNICALL A_0024B_foo(JNIEnv* env, jobject b);

显然本机函数可以访问B.this; 它作为b. 如何访问A.this的封闭外部实例A

4

2 回答 2

2

使用 javap,我很确定答案是this$0

$ javac A.java
$ javap -s -p 'A$B'
Compiled from "A.java"
class A$B extends java.lang.Object{
final A this$0;
  Signature: LA;
A$B(A);
  Signature: (LA;)V
public native void foo();
  Signature: ()V
}

请注意,如果在 unix 风格的命令行上运行,您需要使用引号来防止 $ 被解释为 shell 变量的开头。

还要注意(如果这出现在其他人的搜索结果中)内部类的构造函数具有外部类的隐式第一个参数 - 所以如果你想从原生构造其中一个,你必须问以这种方式为构造函数。

于 2013-02-01T23:13:24.947 回答
0

好吧,如果没有 jni 支持访问 $this 或实际调用的任何变量,您可以将 B.this 传递给本机函数。

于 2012-04-19T20:59:30.527 回答