Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 属性为null,但看起来不应该为空_Java_Inheritance_Nullpointerexception_Null - Fatal编程技术网

Java 属性为null,但看起来不应该为空

Java 属性为null,但看起来不应该为空,java,inheritance,nullpointerexception,null,Java,Inheritance,Nullpointerexception,Null,我有一个类TrueFalse,它扩展了一个类问题 问题具有属性answers,该属性是Answer类型的ArrayList 有人知道为什么吗?谢谢你的帮助 编辑: 我相信这是堆栈跟踪?我是新来的,所以我想这就是我们想要的: null Exception in thread "main" java.lang.NullPointerException at Question.TrueFalse.take(TrueFalse.java:53) at Survey.Survey.take(Survey.

我有一个类TrueFalse,它扩展了一个类问题

问题具有属性answers,该属性是Answer类型的ArrayList

有人知道为什么吗?谢谢你的帮助

编辑:

我相信这是堆栈跟踪?我是新来的,所以我想这就是我们想要的:

null
Exception in thread "main" java.lang.NullPointerException
at Question.TrueFalse.take(TrueFalse.java:53)
at Survey.Survey.take(Survey.java:239)
at Survey.Main.mainMenuSelection(Main.java:74)
at Survey.Survey.mainMenu(Survey.java:320)
at Survey.Main.mainMenuSelection(Main.java:41)
at Survey.Survey.mainMenu(Survey.java:320)
at Survey.Main.main(Main.java:196)
编辑2:

这就是从我的Survey类调用take方法的地方


}嗯,我看不出有什么明显的问题

但是,我认为此处使用的受保护属性在我看来不太好,建议您使用有问题的类:

private ArrayList<Answer> answers = new ArrayList<Answer>();
protected ArrayList<Answer> getAnswers(){
    return answers;
}

您确定在调查中正确初始化了问题对象吗

 survey.questions.get(i).take(survey.questions.get(i));
一般来说,我不知道这句话的意思是什么。对于我的调查,请从我的问题中选择一个特定的问题,然后使此问题在..上激活方法。。它本身这就是为什么这个关键字是为第一位。。。也许你应该试试:

public void take() {
input = new Input();
answer = new Answer();

System.out.print("Enter Option: ");
int response = input.getIntInput(this.options.size());
answer.setAnswerNumber(response);

System.out.println(this.answers); // NO NEED TO SEND THE QUESTION TO ITSELF
this.answers.add(answer);

}

我在我的问题课上拿出答案列表的作业,并将其放在我的take方法中,如下所示:

public void take(Question question) {
    input = new Input();
    answer = new Answer();
    answers = new ArrayList<Answer>();

    System.out.print("Enter Option: ");
    int response = input.getIntInput(question.options.size());
    answer.setAnswerNumber(response);

    System.out.println(question.answers);
    question.answers.add(answer);
}
现在的问题是:

public ArrayList<Answer> answers;

有人知道为什么会这样解决吗?

请附加完整的代码和stacktrace stacktrace告诉您什么?除了SWAG之外,没有足够的信息,但我的问题是:您是否可以通过在构造函数中重新声明来隐藏答案字段?如果执行此操作,则初始化局部变量,而不是字段。请改进你的问题,这样我们就不必做假货了。附带建议:不要直接访问对象的字段。而是使用setXXX…、getXXX和addXXX。。。公共方法。请发布问题类问题是抽象的-您在扩展问题的具体类中对答案做了什么?您正在声明变量吗?不是您的down投票者,但是getter方法不应该是公共的吗?更改为使用此方法,但是仍然得到null。谢谢你的反馈。是的,我是一个新手,所以我忘记了最好的实现方法,我试着改变到上面的方法,但我仍然在同一行中得到相同的异常。谢谢你的回复!当然可以:你能分享一下你是如何在你的调查课上初始化问题的吗?我想我解决了这个问题,但我不知道为什么它会起作用。你能看看我自己贴的答案吗?谢谢这仅仅说明你没有在c'tor中的问题类中初始化你的答案列表,例如。。。小心-如果您将对每个问题对象多次使用take方法,您将重置问题的当前状态
private ArrayList<Answer> answers = new ArrayList<Answer>();
protected ArrayList<Answer> getAnswers(){
    return answers;
}
System.out.println(question.getAnswers()); 
question.getAnswers().add(answer);
 survey.questions.get(i).take(survey.questions.get(i));
public void take() {
input = new Input();
answer = new Answer();

System.out.print("Enter Option: ");
int response = input.getIntInput(this.options.size());
answer.setAnswerNumber(response);

System.out.println(this.answers); // NO NEED TO SEND THE QUESTION TO ITSELF
this.answers.add(answer);
public void take(Question question) {
    input = new Input();
    answer = new Answer();
    answers = new ArrayList<Answer>();

    System.out.print("Enter Option: ");
    int response = input.getIntInput(question.options.size());
    answer.setAnswerNumber(response);

    System.out.println(question.answers);
    question.answers.add(answer);
}
public ArrayList<Answer> answers;