繁体   English   中英

如果一个方法返回一个匿名类,它返回一个子类还是一个内部类?

[英]If a method returns an anonymous class, is it returning a subclass or an inner class?

也许没关系,但是我还是想知道。 我想知道返回匿名类的含义,例如:

public class Module extends BaseModule {

    private BaseInitializable initializeModule() {
        return new BaseInitializable() {
            public void initialize(InitializationContext context) {
                helperA.initialize();
                helperB.initialize();
                s_logger.log(LogLevel.INFO,"something");
            }

            public void shutdown(InitializationContext context) {
            }
        };
    }
}

发布1

发布2

根据帖子1,似乎代码正在返回匿名内部类。 但这是否违反内部类的原则,因为它们仅与它们所驻留的父类相关(根据文章2)? 在帖子1中接受的答案说,内部类也是父类的子类。 如果是这样,则返回此内部/子类是有意义的。 但是根据Post 2,内部类不是子类。 那我该怎么办呢? 此方法是否返回内部类或子类的实例?

这句话“ [内部类]仅与它们所驻留的父类相关”,这是完全错误的。

内部类具有对外部类的隐藏引用,并且有权访问外部类的私有成员。 基本上就是所有这些使它与众不同。

您问题中的方法的确确实返回了源自或实现BaseInitializable(是接口还是类?)的匿名内部类的实例。

请注意,如果BaseInitializable是一个类,则此匿名内部类也是 BaseInitializable的子类。 如果BaseInitializable是接口,则从技术上讲,它不是子类。

在这种情况下,内部类不是外部类的子类。 我认为这就是Post 2所说的。

我想知道返回匿名类的含义,例如:

    return new BaseInitializable() {
        ...
    };

这取决于BaseInitializable是什么。 如果它是一个 ,则匿名类是BaseInitializable的子类。 如果它是接口 ,则匿名类是Object的子类,它实现BaseInitializable

另外,请记住,匿名类按定义是内部类。 JLS 15.9.5这样说 匿名类声明

匿名类始终是内部类。

这意味着要回答您的问题:

此方法是否返回内部类或子类的实例?

都。 匿名类是一个内部类一个子类(属于BaseInitializableObject )。

或者,如果您不将Object作为其超类的类视为子类:
这取决于。 匿名类是内部类。 如果它实现一个而不是一个接口 ,它也是一个子

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM