在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
的封闭外部实例?
答案 0 :(得分: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变量的开头。
另请注意(如果出现在其他人的搜索结果中)内部类的构造函数具有外部类的隐式第一个参数 - 所以如果您想从本机构造其中一个,那么你将会必须以这种方式询问构造函数。
答案 1 :(得分:0)
好吧,如果没有jni支持访问$ this或者实际调用的变量,你可以将B.this传递给本机函数。