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