这是什么参考?

假设我有这个课程:
public class class1 extends Applet implements Runnable
{
    private String s;
    private URL u;
    ...
}
第二节课:
class TS extends Thread
{
    private final class1 _$97913;
    public TS(class1 paramclass1)
    {
        this._$97913 = paramclass1;
    }
    ...
    public void PostData()
    {
        ...
        class1.access$16(this._$97913, new Socket(class1.access$17(this._$97913), 80);
        ...
    }
    ...
}
有人可以解释
class1.access$16(this._$97913, new Socket(class1.access$17(this._$97913), 80);
如何从class1引用
private URL u;
access$16
来自哪里?这叫什么,我在哪里可以了解更多? 好吧,这是反编译代码的结果,有没有办法将数字(
access$16
access$17
等)与原始变量或类相关联?从我所看到的,唯一的方法是手动这样做(即看到被引用的地方并猜测,因为'这个'类接收了一个URL,那么'this'必须与'that'变量相关联)?     
已邀请:
  好吧,这是反编译代码的结果,有没有办法将数字关联起来   (
access$16
access$17
等)到原始变量或类?从我所看到的,   唯一的方法是手动完成(即看哪些被引用的地方和   猜测因为'this'类收到了一个URL,那么'this'必须与'that'变量相关联)? 如果从嵌套类(或其他方式,或从一个嵌套类到另一个嵌套类)访问私有方法或变量,则会创建
access$x
方法。它们由编译器创建,因为VM不允许直接访问私有变量。 如果反编译器允许这些方法调用保留在using类的重新创建的源代码中,那么它还应该让合成方法定义保留在已使用类的重新创建的源代码中。如果是这样,看看作为相关方法的接收者的类(在你的情况下为
class1
),应该有这样的方法(
access$17
)。在此方法的代码中,您可以在此处查看访问哪个实际方法(或变量)。 如果反编译器删除了合成方法,这可能是一个错误,也可能是可配置的。也可能是你必须立即将所有类传递给它,然后它可以在任何地方放入正确的方法/字段 - 查看其文档。 如果您在方法调用的点之前有类(以及它们的超类,如果有的话),那么您应该拥有这些方法。 从您发布的片段中,
class1
中应该有一个
access$16
access$17
方法(或者
class1
是一个局部变量?)。 如果不是,也许你的反编译器试图更聪明,那么他应该。您可以查看
javap class1
的输出以查看方法是否存在,以及整个字节码的
javap -c class1
。或者使用另一个反编译器。     
这是反编译java的结果吗? 它看起来像一个合成方法,允许外部和内部类访问彼此的私有字段或方法。   当使用private修饰符指定的属性被封闭类访问时,Java编译器必须在嵌套类上创建合成方法。下一个代码示例表明了这种情况。      ...      如上面的屏幕快照所示,已在嵌套类NestedClass上创建名为access $ 100的合成方法,以将其私有String提供给封闭类。请注意,仅为封闭类访问的NestedClass的单​​个私有属性添加合成方法。     

要回复问题请先登录注册