簡體   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