我得到一个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();
}
}
在构造函数中实例化对象后,当我尝试使用超类方法在内部类中赋值时,我收到运行时错误。
知道这里有什么?你能否在子类构造函数中调用超类方法?
**编辑**原始问题是关于外部类构造函数中的内部类成员赋值。原来问题是在类的构造函数中调用超类方法。它给了我一个空指针异常。因此,问题已经改变。
答案 0 :(得分:1)
所以我添加了一个分号,一个空基类和一个主。
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平台。)
(分号是复制粘贴错误?还是这不是原始代码?)
答案 1 :(得分:0)
尝试制作内部static
:
public static class Data {
这样它就不依赖于MainApplication实例。
<强>更新强>
从您的评论中看来,您的意思是,当调用其中的方法时,构造中的对象的Application
部分未正确初始化。
调用从自己的构造函数构造的对象的方法可能会导致意外的行为,因为在构造函数完成之前,对象不会一致地初始化。也就是说,添加对超级构造函数的显式调用可能会修复您的依赖项:
MainApplication() {
super();
data = new Data();
答案 2 :(得分:0)
非静态内部类(如Data类)要求MainApplication实例有效。在构造函数期间,MainApplication未完全形成,因此无法使用。正如rsp所说,使Data静态应该解决这个问题。