我只是在试验内部类,并且遇到了这个有本地但是静态内部类的想法......我在静态方法中创建了一个内部类......好吧,它就像那样简单...... 这是我做的例子
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 之外的本地类中的任何方法或属性。只是想确保..
答案 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();
* 不言而喻,还有一种通过反射访问这些类的方法,但这是Java语言本身的能力之外。
答案 1 :(得分:1)
“因此我无法访问LocalStatic或来自类外部的本地类中的任何方法或属性只是想确保...”范围甚至小于Outer
类 - 你可以仅在LocalStatic
方法中访问m()
课程。
答案 2 :(得分:1)
标题中问题的答案是你可以在静态上下文(静态方法或静态初始化程序)中声明一个本地内部类,但它不会有一个封闭的类实例。所以称之为
是有道理的本地静态内部课程
或者
本地静态嵌套类
我从未见过有人打电话给他们或实际上使用过他们。
答案 3 :(得分:0)
您可以在任何方法或构造函数或初始化程序中声明一个类。这样的类称为本地类。该方法是否静态无关紧要。除了声明它的方法或构造函数或初始值设定项之外,不可能从代码的任何部分引用这样的类。
几乎从不使用本地类。我认识多年来一直是专业java程序员的人,他们不知道可以在方法中声明类。