我在做一个项目时遇到了这段代码,这被报告为某个错误。
public class Test {
public static Test ONE = new Test() {
@Override
public int value() {
return 1;
}
};
private Test() {
}
public int value() {
return 0;
}
}
Run Code Online (Sandbox Code Playgroud)
我认为这段代码的意思是:
我认为这只是Test使用名为ONE.
用户提到的内容:
用户提到这是外部类中的嵌套类,但我很困惑如何将类嵌套在其自身中。
我研究过的内容:
我使用名为 ANTLR 的代码解析器来解析这段代码,结果表明这不是一个类,而是使用了令牌类型。
提前致谢
它是一个(嵌套的)匿名内部类,但不是人们通常所说的嵌套类,据我所知,它通常指的是非本地非匿名成员类。尽管任何不是顶级类的类当然都是嵌套类。
这个类不是“嵌套在自身”,因为new Test() { ... }实际上是一个匿名子类的Test。
我已经包含了一张我在这里找到的图表和一个非常详尽的代码示例列表。
import static java.lang.System.out;
@SuppressWarnings("unused")
public class Test {
static String staticField = "field in class static context";
String instanceField = "field in instance context";
static Object staticRef1 = /* Static Field Reference to ... */
/* ... Anonymous Inner Class created in static context */
new Object() {
public void print() {
out.println(staticField);
}
};
static Object staticRef2; /* Static Field Reference to ... */
static { /* static block ... */
String localVar_InStaticBlock = "local variable in static block context";
/* ... Anonymous Inner Class created in static block context */
staticRef2 = new Object() {
public void print() {
out.println(localVar_InStaticBlock);
out.println(staticField);
}
};
/* Local Reference to Anonymous Inner Class created in static block context */
Object localVar = new Object() {
public void print() {
out.println(localVar_InStaticBlock);
out.println(staticField);
}
};
}
Run Code Online (Sandbox Code Playgroud)
public Object instanceRef1 = /* Instance Field reference to ... */
/* ... Anonymous Inner Class created in instance context */
new Object() {
public void print() {
out.println(instanceField);
out.println(staticField);
}
};
/* Instance Field reference to ... */
public Object instanceRef2;
{ /* instance block... */
String localVar_InInstanceBlock = "local variable in instance block context";
/* ... Anonymous Inner Class created in instance block context*/
instanceRef2 = new Object() {
public void print() {
out.println(localVar_InInstanceBlock);
out.println(instanceField);
out.println(staticField);
}
};
/* Local Reference to Anonymous Inner Class created in instance block context */
Object localVar = new Object() {
public void print() {
out.println(localVar_InInstanceBlock);
out.println(instanceField);
out.println(staticField);
}
};
}
Run Code Online (Sandbox Code Playgroud)
/* Nested Inner Class */
class NestedInnerClass {
public void foo() {
out.println(instanceField);
out.println(staticField);
}
}
/* Nested Static Class */
static class NestedStaticClass {
public void foo() {
out.println(staticField);
}
}
Run Code Online (Sandbox Code Playgroud)
void method() {
String localVar_InMethodContext = "local variable in method context";
/* Method-Local Inner Class */
class MethodLocalInnerClass {
void print() {
out.print(localVar_InMethodContext);
out.println(instanceField);
out.println(staticField);
}
}
Object methodLocalTest = new MethodLocalInnerClass();
// ...
}
}
Run Code Online (Sandbox Code Playgroud)