java:扩展一个内部类

问题描述 投票:1回答:1

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()

他为什么这样做?

java inner-classes
1个回答
1
投票

内部类对象通常需要保存对外部类对象的引用。

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

  1. 内部类无法链接到外部类(。此为null)。
  2. 内部类在外部类被加载之前已经加载,它不符合JVM的原理。

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

© www.soinside.com 2019 - 2024. All rights reserved.