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,将导致两个问题:
这里,通过withInner.getClass()抛出NullPointerException解决此问题