Java匿名类拥有字段_java – 从内部匿名类访问外部匿名类的字段

要从内部类B访问外部类A的字段x,我意识到您可以使用“A.this.x”.但是,如果外层阶级也是匿名的呢?例如,

public class Main1 {

public static void main(String[] args) {

Comparable c1 = new Comparable(){

int x = 3;

public int compareTo(Object o) {

Comparable c2 = new Comparable(){

int x = 4;

public int compareTo(Object o) {

return x; //

}

};

return c2.compareTo(o);

}

};

System.out.println(c1.compareTo(null));

}

}

运行此代码时,将打印值4,因为这是c2的字段x的值.但是,我想更改标记为“THIS LINE”的行,以便返回外部类的x(即c1的字段x,值为3).如果外部类(即c1的类)是一个命名的类A,那么我可以替换

return x;

return A.this.x;

但由于外层也是匿名的,我没有名字可以使用.

问题:有没有办法修改标记为“THIS LINE”的行,使其引用c1的字段x而不是c2,而不将匿名类更改为命名类?

我意识到这段代码非常难看,以这种方式使用匿名类是不好的编程风格,但代码是由另一个程序生成的,这是实现生成器的最简单方法.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java匿名内部类是指在定义一个类的同时实例化它的对象,但没有为该类定义一个具体的类名。在编译期间,Java编译器会为匿名内部类生成一个与外部类关联的特殊名称的class文件,并且在运行期间通过反射进行实例化和调用。 通过对匿名内部类的字节码进行分析,可以了解到以下几点: 1. 匿名内部类的class文件命名规则:Java编译器会为匿名内部类生成一个特殊的名称,一般格式为"外部类名$数字.class",其中外部类名为包含匿名内部类的外部类的名称,数字是一个递增的整数,用于区分不同的匿名内部类。 2. 匿名内部类的继承关系:在生成的class文件中,匿名内部类会继承一个特殊的父类和实现特殊的接口,以便实现外部类中定义的抽象方法或接口方法。 3. 匿名内部类的访问匿名内部类在访问外部类中的成员变量或方法时,会将它们保存在一个特殊的隐藏字段中,并通过构造函数或方法的参数传递给匿名内部类的构造函数或方法。 4. 匿名内部类的实例化:在外部类中实例化匿名内部类时,会先调用匿名内部类的构造函数,在构造函数中进行必要的初始化操作,并且可以重写父类或接口的方法。 5. 匿名内部类的调用:生成的class文件中,匿名内部类的方法以特殊的命名方式进行定义,用于实现外部类中定义的方法。 总结来说,通过分析匿名内部类的字节码,可以了解到匿名内部类的继承关系、访问方式、实例化过程和调用方式,从而深入了解Java匿名内部类的工作原理和实现机制。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值