Java 如何引用本地类
我有一个本地班Java 如何引用本地类,java,local-class,Java,Local Class,我有一个本地班 public class Outer { public void wrapper() { class Local { } } } Outer.wrapper.Local.class ## this doesn't seem to work 我有一个测试需要引用本地类 public class Outer { public void wrapper() { class Local { }
public class Outer {
public void wrapper() {
class Local {
}
}
}
Outer.wrapper.Local.class ## this doesn't seem to work
我有一个测试需要引用本地类
public class Outer {
public void wrapper() {
class Local {
}
}
}
Outer.wrapper.Local.class ## this doesn't seem to work
如何引用本地类?您只能在声明本地内部类的方法中引用它:
public void wrapper() {
class Local {
}
Local obj = new Local();
}
由于这些类的范围有限,它们往往不是很有用。如果您找到了一个有效的用例来定义一个,请看一看。本地类(也称为本地内部类或方法本地内部类): 局部类定义为方法中的内部类。与局部变量一样,局部内部类声明在调用方法之前不存在,并且在方法返回时超出范围。这意味着只能从声明它的方法中创建它的实例 该内部类只能在其定义之后实例化(即,实例化代码必须遵循声明)。内部类不能访问方法的局部变量,除非这些变量是final或实际上是final 以下是一个例子:
int length = 10; // outer class's instance variable
public void calculate() {
final int width = 20;
class Inner { // inner class definition
public void area() {
System.out.println(length * width);
}
}
Inner local = new Inner(); // this statement comes only after local class's definition
local.area();
}
注意事项:
- 唯一可以应用于本地内部类的方法的修饰符 是抽象的和最终的,但决不能两者同时存在
- 静态方法中声明的本地类只能访问封闭类的静态成员,不能访问实例 变量
private
@nobar JLS 14.3。本地类声明禁止使用修饰符,因此编写私有类本地
将触发编译错误。我认为它们是它们自己的特殊面包。@nobar不,它们是局部的:它们和局部变量一样可访问(例如,在同一个编译单元中,私有类是可访问的)。如果你想给它一个标签,那可能是“真正私有的”。根据“每个本地类声明语句都立即包含在一个块中”。使用这种措辞,我会说他们是私人的。但是“真正私有”听起来更好:)block private是我的想法——或者是封闭范围的私有,即块。这看起来像是从某个教程中复制粘贴的,它甚至没有回答如何从方法外部访问该本地类的问题。回答文章的内容不是来自教程。这是我自己为去年某个时候的JavaSE8认证考试准备的笔记。我用它通过了考试。答案显示了如何恰当地使用方法本地类,并考虑一些要点。OP有一个问题,我如何引用本地类?这篇文章的标题是如何引用本地类。我特别感兴趣的是从一个单独的测试类中引用本地类。如果我不清楚的话,很抱歉。@没有人可以从另一个类引用内部类;但不是本地类的方法。还有其他(非本地)类型的内部类要考虑——规则内部类或静态嵌套类。@ NoBar这里是Oracle java教程主题的链接。这有关于嵌套类的详细信息,通常是每种类型的。