我正在阅读Java库中的一些源代码,在这里我感到很困惑;
这段代码来自jaxb库中的Document.java,而ContentVisitor是同一个包中的接口,我们如何使用新关键字创建接口实例?这不违法吗?
public final class Document {
.
.
private final ContentVisitor visitor = new ContentVisitor() {
public void onStartDocument() {
throw new IllegalStateException();
}
public void onEndDocument() {
out.endDocument();
}
public void onEndTag() {
out.endTag();
inscopeNamespace.popContext();
activeNamespaces = null;
}
}发布于 2012-02-06 09:12:38
在代码中,您没有创建接口的实例。相反,代码定义了一个实现接口的匿名类,并实例化该类。
该守则大致相当于:
public final class Document {
private final class AnonymousContentVisitor implements ContentVisitor {
public void onStartDocument() {
throw new IllegalStateException();
}
public void onEndDocument() {
out.endDocument();
}
public void onEndTag() {
out.endTag();
inscopeNamespace.popContext();
activeNamespaces = null;
}
}
private final ContentVisitor visitor = new AnonymousContentVisitor();
}发布于 2012-02-06 09:14:35
是有效的。这叫匿名课。看这里
我们已经看到了定义和实例化匿名类的语法示例。我们可以更正式地将这种语法表述为: 新类名(参数列表){类体} 或者: 新接口-name () {类-body}
发布于 2012-02-06 09:12:53
它称为anonymous类型/类,它实现了该接口。看看教程- 本地和匿名内部类。
https://stackoverflow.com/questions/9157784
复制相似问题