gpt4 book ai didi

java - 使用 JNI 访问嵌套类的外部实例

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:34:05 27 4
gpt4 key购买 nike

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

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

native方法在JNI中实现:

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

显然 native 函数可以访问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 变量的开头。

另请注意(以防其他人的搜索结果中出现这种情况)内部类的构造函数具有外部类的隐式第一个参数——因此,如果您想从 native 构造其中一个参数,您将必须以这种方式请求构造函数。

关于java - 使用 JNI 访问嵌套类的外部实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10236482/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com