[英]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.