在 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
?
在 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
?
使用 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 变量的开头。
还要注意(如果这出现在其他人的搜索结果中)内部类的构造函数具有外部类的隐式第一个参数 - 所以如果你想从原生构造其中一个,你必须问以这种方式为构造函数。
好吧,如果没有 jni 支持访问 $this 或实际调用的任何变量,您可以将 B.this 传递给本机函数。