当前位置: 首页 > 知识库问答 >
问题:

有没有叫做局部静态内部类的东西?

储志业
2023-03-14

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

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

共有3个答案

万嘉熙
2023-03-14

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

局部静态内部类

或者也许

局部静态嵌套类

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

王弘和
2023-03-14

"因此,我无法从外部类外部访问LocalStatic或该本地类中的任何方法或属性只是想确保…"范围甚至比外部类更小-您可以访问LocalStatic类仅在m()方法中。

姬英耀
2023-03-14

我想知道是否有方法从外部类访问本地类LocalStatic

没有办法做到这一点。局部类是局部的,所以访问它们的唯一方式是从类在scope*中的方法。

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

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语言本身的功能之外。

 类似资料:
  • 我想使用Powermock(基于EasyMock)模拟私有静态内部类。这不是来自生产代码,这只是一个是否可能的问题。我很确定这是一个糟糕的设计,但这是我为科学而努力的东西。 假设我们有一个具有静态私有内部类的类: IExpectationSetters中的andReturn(capture)不能应用于(java.lang.Object)  私人静态内部阶级的嘲笑甚至可能吗?我还没有在SO上找到一个

  • 我知道这个问题有点简单,但我真的想知道为什么不去留档,假设我有这样的课。 } 两个静态方法都抛出一个错误,指出 修饰符“静态”仅允许在常量变量声明中使用 我知道医生说 这在Java语言规范部分§8.1.3中有描述 8.1.3内部类和封闭实例 但我的问题是,调用简单值或属性与调用静态方法(无论是公共方法还是私有方法)有什么区别?。为什么可以调用属性,但不能调用方法。 谢谢

  • 问题内容: 如果存在Kotlin语言,可以用什么替代方法?如果没有,当我需要在Kotlin中使用时如何解决此问题?请参见下面的代码示例: 我搜索了很多东西,没有发现任何东西,非常感谢。 问题答案: 只需在Kotlin中省略。 内部类(持有对外部对象的引用) Java: 科特林: 静态内部类又称为嵌套类(不引用外部对象) Java: 科特林:

  • 问题内容: 在java中内部类和静态内部类有什么不同? 问题答案: 从Java教程: 嵌套类分为两类:静态和非静态。声明为静态的嵌套类简称为静态嵌套类。非静态嵌套类称为内部类。 静态嵌套类使用封闭的类名称访问: 例如,要为静态嵌套类创建一个对象,请使用以下语法: 作为内部类实例的对象存在于外部类实例中。考虑以下类别: InnerClass的实例只能存在于OuterClass的实例中,并且可以直接访

  • 静态内部类是指使用 static 修饰的内部类。示例代码如下: 上述示例中的 Inner 类就是静态内部类。静态内部类有如下特点。 1) 在创建静态内部类的实例时,不需要创建外部类的实例。 2) 静态内部类中可以定义静态成员和实例成员。外部类以外的其他类需要通过完整的类名访问静态内部类中的静态成员,如果要访问静态内部类中的实例成员,则需要通过静态内部类的实例。 3) 静态内部类可以直接访问外部类的

  • 问题内容: 在C / C ++中,我们使用静态局部变量来维护方法的状态。但是,为什么Java不支持它呢? 是的,我可以为此使用一个静态字段。但是创建一个仅维护一个方法状态的字段有点奇怪吗? 问题答案: 您已经找到了唯一的解决方案。 Java放弃了C ++的许多复杂性,这就是其中之一。 作用于函数的静态变量并发地对您造成麻烦(例如,正是由于这个原因,strtok是与pthread一起使用的著名的讨厌