我在处理一个项目时遇到了这段代码,这被报告为某些内容的错误。
public class Test {
public static Test ONE = new Test() {
@Override
public int value() {
return 1;
}
};
private Test() {
}
public int value() {
return 0;
}
}
我认为这段代码的意思是:
我认为这只是用一个名为 ONE
的引用变量实例化类 Test
。
用户提到的内容:
用户提到这是外部类中的嵌套类,但我对如何嵌套类本身感到困惑。
我所研究的:
我使用名为ANTLR的代码解析器来解析此代码,它表明这不是一个类,而是使用了令牌类型。
提前致谢
虽然极限答案是正确的,但可能会提供一些额外的解释。您的代码被解释为声明一个新的内部类,该类是 Test 的子类,然后实例化该类的对象:
public class Test {
public static Test ONE = new $1();
class $1 extends Test {
@Override
public int value() {
return 1;
}
}
private Test() {
}
public int value() {
return 0;
}
}
如果你编译你的测试。在java中,您将看到生成了两个类文件:Test。类和测试$1.class,后者包含自动生成的匿名内部类。匿名类的名称为$1,但因为它是Test的内部类,所以类文件的名称为Test$1.class。
它是一个(嵌套的)匿名内部类,但不是人们通常所说的嵌套类,据我所知,嵌套类通常指的是非本地非匿名成员类。尽管任何不是顶级类的类都是嵌套类。
由于<code>new 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);
}
};
}
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);
}
};
}
/* 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);
}
}
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();
// ...
}
}
目标 了解如何定义嵌套类和何时适合使用它们 了解使用嵌套类的副作用 了解 new 运算符在嵌套类中的特殊用法 了解如何和何时使用静态内部类和匿名内部类 在何处使用嵌套类 顾名思义,嵌套类(或内部类) 是在一个类中定义的另一个类。 public class EnclosingClass { . . . public class NestedClass { . . . } } 像成
问题内容: 什么是静态嵌套类?静态和非静态嵌套类有什么区别? 问题答案: 静态内部类是嵌套在具有修饰符的另一个类中的类。除了可以访问在其内部定义的类的私有成员之外,它与顶级类几乎相同。 类是静态内部类。类是一个非静态的内部类。两者之间的区别是,非静态内部类的实例被永久连接到的实例-你不能创建一个没有。不过,您可以独立创建对象。 中的代码,并且都可以访问x; 不允许使用其他代码。
问题内容: 我可以做以下事情吗? 问题答案: 香草CSS不可能。但是,您可以使用类似: Sass使CSS再次变得有趣。Sass是CSS3的扩展,添加了嵌套规则,变量,mixins,选择器继承等。使用命令行工具或网络框架插件将其转换为格式良好的标准CSS。 要么 不用构造长的选择器名称来指定继承,在Less中,您可以简单地将选择器嵌套在其他选择器中。这样可以使继承更清晰,样式表更短。 例:
本页包含内容: 嵌套类型实例 嵌套类型的引用 枚举类型常被用于实现特定类或结构体的功能。也能够在有多种变量类型的环境中,方便地定义通用类或结构体来使用,为了实现这种功能,Swift允许你定义嵌套类型,可以在枚举类型、类和结构体中定义支持嵌套的类型。 要在一个类型中嵌套另一个类型,将需要嵌套的类型的定义写在被嵌套类型的区域{}内,而且可以根据需要定义多级嵌套。 嵌套类型实例 下面这个例子定义了一个结
问题内容: 我一直在尝试搜索包含嵌套字段的文档。我创建了这样的嵌套映射: 我的搜索如下所示: 但是我收到此错误消息: 编辑 我仍然收到此错误。我正在通过Java执行此操作,因此这是我要创建的文档: 像这样创建索引: 我认为我可能对文档编制了错误的索引。 问题答案: TLDR:输入您的嵌套类型。 假设我们有一个普通类型,并且嵌套了另一个类型: 该行是分配给的嵌套查询所必需的,如下所示: 该行似乎仅在
我看过这段代码,我已经验证过了,它在w3c HTML5验证上返回VALID。 我很抱歉,我们不能在