Java 是否有所谓的局部静态内部类?
我只是在尝试内部类,并偶然发现了一个想法,即拥有局部但静态的内部类。。。我在一个静态方法中创建了一个内部类。。就这么简单。。 这是我做的一个例子Java 是否有所谓的局部静态内部类?,java,static-methods,inner-classes,local-class,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 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或该本地类内部的任何方法或属性,我只是想确保 我想知道是否有办法从外部类访问本地类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语言本身的能力。您可以在任何方法、构造函数或初始值设定项中声明类。这样的类称为本地类。该方法是否是静态的并不相关。除了在其中声明的方法、构造函数或初始值设定项之外,不可能从代码的任何部分引用此类类
本地类几乎从未使用过。我认识一些多年来一直是专业java程序员的人,他们不知道类可以在方法内部声明。“因此,我不能从类外部访问LocalStatic或本地类内部的任何方法或属性,只是想确保..”范围甚至比
Outer
类还小-您只能在m()
方法中访问LocalStatic
类。您的标题中的问题的答案是,您可以在静态上下文(静态方法或静态初始值设定项)中声明本地内部类,但它不会有封闭的类实例。因此,称之为它是有道理的
局部静态内部类
或许
局部静态嵌套类
我从未见过有人这样称呼它们,或者实际上使用过它们。“但我想知道是否有办法从外部类访问本地类LocalStatic”否,因为它的作用域是方法
m
。本地类只能在您定义它们的方法内访问。就像我一样。如果是这样的话,我将无法通过Java认证。我当然知道匿名类,但我不知道这个构造。但匿名内部类是本地类的类型,对吗?我们在使用函数接口时使用匿名内部类。我对术语不是100%确定,但我认为本地类指的是在方法/构造函数/初始值设定项中定义的命名类,所以匿名类不算数。\cpp初学者同意您的观点。@DiliniPeiris您可以使用匿名内部类实现函数接口,但lambda不是匿名类interest。。Thank=)我们可以通过从另一个外部类扩展本地类LocalStatic来做到这一点,对吗?指出本地类可以在初始值设定项中定义(我在初始答案中没有提到这种情况)。