2011-12-17 72 views
1

我想爲我最喜歡的Android應用程序之一製作圖標擴展包,並且我擁有的唯一源代碼是一些反編譯的源代碼。我不知道應該是什麼來代替「main.1 LOCAL1 =新Main.1(本)」解碼反編譯的源代碼對於Android

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(this)在說什麼。以及Main.access $ 0(this.this $ 0) 因爲main.1對於Java不正確。

+0

你的問題是什麼? – abcde123483 2011-12-17 05:53:53

+0

對不起。我需要知道Main.1 local1 = new Main.1(this)在說什麼。以及Main.access $ 0(this.this $ 0)。我在這裏看到,只有在反編譯的源代碼中才會顯示這樣的內容。 – AndroidKen 2011-12-17 06:01:30

回答

2

這些神祕的符號通常對應於匿名的內部類。 Java VM不知道它們,只知道頂級類,因此Java編譯器提供了幾種解決方法來使內部類可以工作。

至於我可以看到Main.1是一些匿名的地方實施AdapterView.OnItemClickListener

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

本地類有其封閉類的實例隱式引用,這就是爲什麼你看到來電new Main.1(this)。 '這個$ 0'對應於反編譯代碼中的這個引用。

JVM阻止類訪問其他類的私有方法,因此編譯器會生成幾個合成包私有方法,如access$0以訪問封裝實例的私有方法。 "Designing for performance"更詳細地解釋了這一點,並且如果您需要從內部類訪問它們,則建議使用包私有方法。

intValue可能會被明確調用,也可能是自動拆箱的結果。

Java語言還有很多其他功能是用泛型和協變返回類型等合成方法實現的。