簡體   English   中英

在子類構造函數中調用超類方法的問題

[英]Issue calling superclass method in subclass constructor

我得到一個NullPointerException,它在子類內部類構造方法中調用超類方法。


在應用程序的主類(Application的子類)中,我有一個公共內部類,其中僅包含3個公共字符串對象。 在父類中,我聲明該內部類的對象。

public class MainApplication extends Application {
    public class Data {
        public String x;
        public String y;
        public String z;
    }

    private Data data;

    MainApplication() {
        data = new Data()

        data.x = SuperClassMethod();
    }
}

在構造函數中實例化對象之后,當我嘗試使用超類方法在內部類中分配值時,會出現運行時錯誤。

知道這里發生了什么嗎? 您不能在子類構造函數中調用超類方法嗎?

**編輯**最初的問題是關於外部類構造函數中的內部類成員分配。 事實證明,問題在於在類的構造函數中調用超類方法。 這給了我一個空指針異常。 因此,問題已經改變。

因此,我添加了一個分號,一個空的基類和一個main。

class Application {
}

public class MainApplication extends Application {
    public class Data {
        public String x;
        public String y;
        public String z;
    }

    private Data data;

    MainApplication() {
        data = new Data();

        data.x = "String";
    }

    public static void main(String[] args) {
        new MainApplication();
    }
}

為我工作! (盡管我沒有Android平台。)

(分號是復制粘貼錯誤嗎?還是這不是原始代碼?)

嘗試將您的內部類設為static

public static class Data {

這樣,它就不會綁定到MainApplication實例。

更新

從您的評論看來,您的意思是,當調用構造方法下的對象的Application部分時,其Application部分未正確初始化。

由其自己的構造函數構造的對象的調用方法可能導致意外的行為,因為在構造函數完成之前,這些對象不會被一致地初始化。 也就是說,向超級構造函數添加顯式調用可能會修復您的依賴性:

MainApplication() {
    super();

    data = new Data();

非靜態內部類(例如Data類)要求MainApplication的實例有效。 在構造函數期間,MainApplication的格式不完整,因此無法使用。 正如rsp所說,使Data靜態化應該可以解決此問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM