有没有叫做Local Static Inner Class的东西?

时间:2017-10-15 13:39:21

标签: java static-methods inner-classes local-class

我只是在试验内部类,并且遇到了这个有本地但是静态内部类的想法......我在静态方法中创建了一个内部类......好吧,它就像那样简单...... 这是我做的例子

  class Outer {

    static void m() {
        class LocalStatic {

            void s() {
                System.out.println("static local inner class method");
            }

        }
    }
}

class Demo {

    public static void main(String args[]) {

        Outer.m();
    }
}

这不会产生任何编译错误。

我知道如何访问静态方法m。但我想知道是否有办法从外部类访问本地类 LocalStatic ..那么根据我的理解,我们无法访问方法内的某些内容吗?因此,我无法访问 LocalStatic 或来自类 Outer 之外的本地类中的任何方法或属性。只是想确保..

4 个答案:

答案 0 :(得分:6)

  

我想知道是否有办法从外部类

访问本地类LocalStatic

没有办法做到这一点。本地类是本地的,因此访问它们的唯一方法是使用类在 * 范围内的方法。

您可以使用非本地基类或接口访问本地类的对象:

interface SomeInterface {
    void s();
}
class Outer {
    static SomeInterface m() {
        class LocalStatic implements SomeInterface {
            public void s() {
                System.out.println("static local inner class method");
            }
        }
        return new LocalStatic();
    }
}

现在你可以写

SomeInterface i = Outer.m();
i.s();

Demo.

* 不言而喻,还有一种通过反射访问这些类的方法,但这是Java语言本身的能力之外。

答案 1 :(得分:1)

“因此我无法访问LocalStatic或来自类外部的本地类中的任何方法或属性只是想确保...”范围甚至小于Outer类 - 你可以仅在LocalStatic方法中访问m()课程。

答案 2 :(得分:1)

标题中问题的答案是你可以在静态上下文(静态方法或静态初始化程序)中声明一个本地内部类,但它不会有一个封闭的类实例。所以称之为

是有道理的
  

本地静态内部课程

或者

  

本地静态嵌套类

我从未见过有人打电话给他们或实际上使用过他们。

答案 3 :(得分:0)

您可以在任何方法或构造函数或初始化程序中声明一个类。这样的类称为本地类。该方法是否静态无关紧要。除了声明它的方法或构造函数或初始值设定项之外,不可能从代码的任何部分引用这样的类。

几乎从不使用本地类。我认识多年来一直是专业java程序员的人,他们不知道可以在方法中声明类。