2011-12-17 13 views
1

私のお気に入りのAndroidアプリのアイコン拡張パックを作成しようとしています。私の代わりに「MAIN.1のLOCAL1 =新しいMAIN.1(本)」も逆コンパイルされたソースコードのデコード

Gallery localGallery1 = (Gallery)findViewById(R.id.icon_gallery); 
IconImageAdapter localIconImageAdapter = new IconImageAdapter(this); 
localGallery1.setAdapter(localIconImageAdapter); 
Main.1 local1 = new Main.1(this); 
localGallery1.setOnItemClickListener(local1); 

がどうあるべきかわからない、私はMain.access $ 0またはこの$ 0を求めているものはかなりわかりません。 Eclipseがエラーを投げます。

int i = Main.access$0(this.this$0)[paramInt].intValue(); 

私自身のコードを書いていますが、私はこのソースを私のリファレンスポイントとして使用しています。ちょっと分かりやすいようにゴミを分別するのに助けが必要です。私はMain.1 local1 = new Main.1(これについて)が何を話しているかを知る必要があります。 Main.access $ 0(this.this $ 0) Javaのmain.1は正しくないので、

+0

あなたの質問がありますか? – abcde123483

+0

申し訳ありません。私はMain.1 local1 = new Main.1(これについて)が何を話しているかを知る必要があります。 Main.access $ 0(this.this $ 0)だけでなく、私はここで、そのようなものは逆コンパイルされたソースでのみ表示されることを読んでいます。 – AndroidKen

+0

ここでは、逆コンパイルされたソースに関する私のような質問があります。 http://stackoverflow.com/q/5036729 – AndroidKen

答えて

2

これらの不思議なシンボルは、通常、匿名の内部クラスに対応しています。 Java VMはトップレベルのクラスについてのみ認識しているため、Javaコンパイラは内部クラスを動作させるためのいくつかの回避策を提供しています。私の知る限りMain.1を見ることができるよう

AdapterView.OnItemClickListenerのいくつかの匿名のローカル実装です:

OnItemClickListener local1 = new OnItemClickListener() { 
    // ... 
} 

ローカルクラスあなたがnew Main.1(this)に呼び出して見る理由です、その外側のクラスのインスタンスへの暗黙的な参照を持っています。 'this $ 0'は、逆コンパイルされたコードのこの参照に対応します。

JVMはクラスが他のクラスのプライベートメソッドにアクセスするのを防ぎ、コンパイラはaccess$0のようないくつかの合成パッケージプライベートメソッドを生成して、インスタンスを囲むプライベートメソッドにアクセスします。 "Designing for performance"はこれをより詳細に説明しており、内部クラスからアクセスする必要がある場合はpackage-privateメソッドの使用を推奨しています。

intValueは、明示的に呼び出すことも、自動アンボックスの結果として表示することもできます。

ジェネリック型や共変リターン型などの合成メソッドで実装されるJava言語の多くの機能があります。

+0

ダースベレグ、ありがとう。それは理にかなっています。 – AndroidKen

関連する問題