2

我只是在尝试内部类,并遇到了拥有本地但静态内部类的想法……好吧,我在静态方法中创建了一个内部类……就这么简单……这是我做的例子

  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或该本地类中的任何方法或属性,只是想确保..

4

4 回答 4

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();

演示。

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

于 2017-10-15T13:45:08.523 回答
1

“因此,我无法从外部类外部访问 LocalStatic 或该本地类中的任何方法或属性,只是想确保......” 范围甚至小于Outer类 - 您LocalStatic只能在m()方法中访问类。

于 2017-10-15T13:48:02.570 回答
1

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

本地静态内部类

或者可能

本地静态嵌套类

我从未见过有人这样称呼它们或实际上使用它们。

于 2017-10-15T14:15:40.337 回答
0

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

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

于 2017-10-15T13:46:34.557 回答