2009-05-15 7 views
2

私が使用しているサードパーティ製のフレームワークで、文書化されていないクラスを少し拡張しようとしています。私はJD-GUIでの.classファイルを逆コンパイルして、次のように定義された内部クラスを参照してください。

private class DeactivateAction extends AbstractAction { 
    public DeactivateAction() { 
     super("Deactivate"); 
    } 

    public void actionPerformed(ActionEvent paramActionEvent) { 
     if (MyContainingType.this.someBoolean) { 
      MyContainingType.access$102(MyContainingType.this, false); 
      MyContainingType.this.add(MyContainingType.this.interceptor); 
     } 
    } 
} 

私はここに「アクセス$ 102」の行をどのように解釈するかを確認していません。 MyContainingTypeはjavax.swing.JLayeredPaneを継承します。これは私のためにコンパイルされないので、どのようにこれを解釈し、拡張クラスで正しく変換できますか?

答えて

5

これは合成アクセサです。

内部クラスでも、実際にはその囲むクラスのプライベートメンバーにアクセスできません。コンパイラはデフォルトの(パッケージ)アクセスメソッドを "合成"して、内部クラスを囲むクラスのプライベートフィールドで処理できるようにします。

囲いのクラスを見て、access$102が何をしているか把握できるはずです。

javapツールは、-cオプション付きで非常に便利です。

0

AFAIK jd-guiはまだ内部クラスで改善しています。バージョン0.2.9までは、内部クラスを逆コンパイルできませんでした。今それははるかに良く機能し、私は本当に次のリリースを楽しみにしています!

「アクセス$ 102」は静的メソッドのプレースホルダーのようです。類似した署名を持つMyContainingTypeで何かを見つけることができるはずです。

関連する問題