[英]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中接受的答案说,内部类也是父类的子类。 如果是这样,则返回此内部/子类是有意义的。 但是根据Post 2,内部类不是子类。 那我该怎么办呢? 此方法是否返回内部类或子类的实例?
这句话“ [内部类]仅与它们所驻留的父类相关”,这是完全错误的。
内部类具有对外部类的隐藏引用,并且有权访问外部类的私有成员。 基本上就是所有这些使它与众不同。
您问题中的方法的确确实返回了源自或实现BaseInitializable(是接口还是类?)的匿名内部类的实例。
请注意,如果BaseInitializable是一个类,则此匿名内部类也是 BaseInitializable的子类。 如果BaseInitializable是接口,则从技术上讲,它不是子类。
在这种情况下,内部类不是外部类的子类。 我认为这就是Post 2所说的。
我想知道返回匿名类的含义,例如:
return new BaseInitializable() {
...
};
这取决于BaseInitializable
是什么。 如果它是一个类 ,则匿名类是BaseInitializable
的子类。 如果它是接口 ,则匿名类是Object
的子类,它实现BaseInitializable
。
另外,请记住,匿名类按定义是内部类。 JLS 15.9.5这样说。 匿名类声明 :
匿名类始终是内部类。
这意味着要回答您的问题:
此方法是否返回内部类或子类的实例?
都。 匿名类是一个内部类和一个子类(属于BaseInitializable
或Object
)。
或者,如果您不将Object
作为其超类的类视为子类:
这取决于。 匿名类是内部类。 如果它实现一个类而不是一个接口 ,它也是一个子类 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.