繁体   English   中英

java:扩展一个内部类

[英]java: extends a inner class

jdk 版本:1.8.0_241

有一个类扩展了内部类。 代码如下:

class WithInner {
    class Inner {

    }
}

public class ExtendInnerClass extends WithInner.Inner {
    ExtendInnerClass(WithInner withInner) {
        withInner.super(); 
    }
}

为了连接 WithInner 类的对象和 Inner 类的对象,我们必须使用super()方法。 但是当我反编译类文件时,我发现了一些有趣的东西。

public class ExtendInnerClass extends Inner {
    ExtendInnerClass(WithInner withInner) {
        withInner.getClass();
        super(withInner);
    }
}

我发现编译器不仅使用 super() 方法,还使用withInner.getClass()

他为什么要这样做?

内部类对象通常需要持有对外部类对象的引用。

如果没有withInner.getClass()withInner 为 null ,会导致两个问题:

  1. 内部类无法链接到外部类(.this 为空)。
  2. 内部类先于外部类加载,不符合jvm的原理。

在这里,通过 withInner.getClass()抛出 NullPointerException解决这个问题

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM