一尘不染

为什么Java禁止内部类中的静态字段?

java

class OuterClass {
 class InnerClass {
  static int i = 100; // compile error
  static void f() { } // compile error
 }
} 

虽然无法使用来访问静态字段OuterClass.InnerClass.i,但是如果我想记录一些应该是静态的内容(例如,创建的InnerClass对象的数量),则使该字段静态化将很有帮助。那么,为什么 Java禁止内部类中的静态字段/方法呢?

编辑:我知道如何使编译器对静态嵌套类(或静态内部类)感到满意,但是我想知道的是为什么Java禁止从语言设计和内部类(或普通内部类)内部的静态字段/方法实施方面,如果有人对此有更多了解。


阅读 383

收藏
2020-03-07

共1个答案

一尘不染

内部类背后的想法是在封闭实例的上下文中进行操作。以某种方式允许静态变量和方法与这种动机相矛盾?

8.1.2内部类和封闭实例

内部类是未显式或隐式声明为static的嵌套类。内部类不得声明静态初始化器(第8.7节)或成员接口。内部类不得声明静态成员,除非它们是编译时常量字段(第15.28节)。

2020-03-07