2011-12-17 46 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语言还有很多其他功能是用泛型和协变返回类型等合成方法实现的。