3

Java には、ネイティブ メソッドを持つ内部クラスがあります。

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

ネイティブ メソッドは JNI で実装されます。

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

明らかに、ネイティブ関数はB.this;にアクセスできます。として渡されましたbA.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 スタイルのコマンド ラインで実行する場合は、$ がシェル変数の先頭として解釈されないようにするために引用符が必要であることに注意してください。

また、(これが他の人の検索結果に表示される場合に備えて)内部クラスのコンストラクターには、外部クラスの暗黙的な最初のパラメーターがあることに注意してください。したがって、ネイティブからこれらのいずれかを構築する場合は、尋ねる必要がありますそのようにコンストラクターのために。

于 2013-02-01T23:13:24.947 に答える
0

$this または変数が実際に呼び出されるものにアクセスするための jni サポートがない場合は、単に B.this をネイティブ関数に渡すことができます。

于 2012-04-19T20:59:30.527 に答える