非静态内部类仅仅是语法糖。非静态内部类与标准“外部”类完全相同,但有一个例外:它具有一个外部类类型的不可见字段,该字段已声明
final。内部类的所有构造函数都必须将要设置此字段的外部实例作为第一个参数..然后,遍历了所有语法糖袋以隐藏它们。
但这确实是这样,您可以使用javap进行确认。因此,鉴于:
public class Outer { public class Inner {} }
与:
public class Outer {}class Desugared { private final Outer outer; public Desugared(Outer outer) { this.outer = outer; }}
除了语法,这些内容相同:
Outer o = new Outer();o.new Outer.Inner();
是相同的:
Outer o = new Outer();new Desugared(o);
等。
事情是这样的:接口 没有field 。
鉴于他们没有, 他们不可能有这个隐藏的领域
。因此,它们不能是“非静态的”。因此,它们是隐式的“静态”(它们没有隐式可用的外部类实例),并且您不能更改它。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)