SMILET
在非静态内部类中允许静态方法没有多大意义; 你怎么去访问它?您无法访问(至少最初)非静态内部类实例而无需通过外部类实例。创建非静态内部类没有纯粹的静态方法。对于外部类Outer,您可以访问如下静态方法test():Outer.test();对于静态内部类Inner,您可以innerTest()像这样访问其静态方法:Outer.Inner.innerTest();但是,如果Inner不是静态的,那么现在没有纯粹的静态方法来引用该方法innertest。非静态内部类与其外部类的特定实例相关联。函数与常量不同,Outer.Inner.CONSTANT因为对函数调用Outer.Inner.staticFunction();不保证引用是明确的。假设您有Inner.staticFunction()那些getState()定义的调用Outer。如果您尝试调用该静态函数,则现在对Inner类有一个不明确的引用。也就是说,你在内部类的哪个实例上调用静态函数?这很重要。看,由于对外部对象的隐式引用,没有真正的静态方法来引用该静态方法。保罗贝洛拉是正确的,语言设计师可以允许这样做。然后,他们必须小心地禁止对非静态内部类的静态方法中对外部类的隐式引用的任何访问。在这一点上,如果你不能引用外部类,除了静态之外,这是一个内部类的值是什么?如果静态访问没问题,为什么不将整个内部类声明为静态呢?如果你只是让内部类本身是静态的,那么你没有对外部类的隐式引用,并且你不再有这种歧义。如果您确实需要非静态内部类的静态方法,那么您可能需要重新考虑您的设计。