首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Java:使用新关键字的接口怎么可能?

Java:使用新关键字的接口怎么可能?
EN

Stack Overflow用户
提问于 2012-02-06 09:10:26
回答 9查看 28.3K关注 0票数 70

我正在阅读Java库中的一些源代码,在这里我感到很困惑;

这段代码来自jaxb库中的Document.java,而ContentVisitor是同一个包中的接口,我们如何使用新关键字创建接口实例?这不违法吗?

代码语言:javascript
复制
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;
    }
}
EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2012-02-06 09:12:38

在代码中,您没有创建接口的实例。相反,代码定义了一个实现接口的匿名类,并实例化该类。

该守则大致相当于:

代码语言:javascript
复制
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();
}
票数 74
EN

Stack Overflow用户

发布于 2012-02-06 09:14:35

是有效的。这叫匿名课。看这里

我们已经看到了定义和实例化匿名类的语法示例。我们可以更正式地将这种语法表述为: 新类名(参数列表){类体} 或者: 新接口-name () {类-body}

票数 16
EN

Stack Overflow用户

发布于 2012-02-06 09:12:53

它称为anonymous类型/类,它实现了该接口。看看教程- 本地和匿名内部类

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9157784

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档