【发布时间】:2021-10-01 21:15:36
【问题描述】:
我们知道可以使用外部类的实例来访问非静态内部类,因此静态方法在非静态类内部意义不大。但是从 Java 16 开始,非静态内部类中允许使用静态方法。
为什么首先存在这个限制?为什么新版本允许这样做?
public class OuterClass {
class InnerClass {
static void printMe() {
System.out.println("Inside inner class");
}
}
public static void main(String[] args) {
InnerClass.printMe();
}
}
【问题讨论】:
-
re 为什么在较新的版本中允许使用它?可能是因为它很有用。我偶尔也希望如此。封装在适当位置但不依赖任何内部或外部实例的方法似乎定义良好。
-
一个更好的问题是:为什么这个限制首先存在?
-
@BrianGoetz 你能提供一个答案吗? :)
-
@AndyTurner 我的印象是他们想假装外部类的每个实例都有一个全新的内部类,就好像outer1.InnerClass 与outer2.InnerClass 是不同的类一样。当然,这不是它的实际工作方式,但通过禁止
static,他们可以让这种错觉持续更长时间...... -
@AndyTurner user253751 的回答大部分是正确的——在添加嵌套时(Java 1.1),在另一个类中有多种可能的静态解释,所以这个问题被推迟了。
标签: java inner-classes java-16