2014-10-08 5 views
0

도움을 미리 감사드립니다.개체에 대한 NullPointerException

public Question(String text) { 
    this.totalPossibleSelections = 1; 
    this.text = text; 
    this.currentSelections = new QuestionElement[1]; 
    this.finalSelections = new QuestionElement[1]; 
} 

와 같은 클래스에서이 방법 :

나는 다음과 같은 생성자가

protected QuestionElement[] currentSelections; 

내 객체 Question의 매개 변수 중 하나입니다

public void setCurrentSelection(QuestionElement selection) { 
    if (totalPossibleSelections == 1){ 
     currentSelections[0] = selection; 
    } 
} 

.

currentSelectionsNullPointerException을 유발하는 setCurrentSelection으로 전화하면 null입니다. 메서드 setCurrentSelection은 질문에만 작동 할 수 있으므로 currentSelections은 null이 아니어야합니다. 다른 코드에서 생성자를 호출하여 내 Question을 초기화했습니다. 여기에 무슨 일이 벌어지고 있을까요?

편집 : Question의 하위 클래스가 없습니다. 또한 생성자가 호출됩니다. 그렇지 않은 경우 totalPossibleSelectionsnull이됩니다.

+2

null 일 수 없습니다 혼란 다음을 방지하기 위해'클래스에서 다른 곳 currentSelections'. – Eran

+0

U가 배열을 초기화하고 디버그 모드를 실행하는 중단 점을 설정합니다. –

+0

상속 있습니까? currentSelections가 기본 클래스의 일부인지, 아니면 "내 객체의 매개 변수 질문"을 의미합니까? 또 다른 생성자? –

답변

3

아마도 QuestionElement[]protected이므로 null로 설정하는 하위 클래스입니다. protected final QuestionElement[] currentSelections

변경 당신이 무효로되지 않도록 확인해야합니다,이 생성자가 호출되고 있는지 확인하는 경우가

+0

질문 – HXSP1947

+0

의 하위 클래스가 없습니다. 그러면 'private final QuestionElement [] currentSelections'이됩니다. 당신은 어딘가에 당신이 그것을 dereferencing하는 경우 (null로 만드는) 볼 수 있습니다. – Blundell

+0

나는 그런 바보 같은 느낌. 당신 말이 맞아요. 나는 이것을 이해하려고 지난 3 시간을 보냈다. 변수를 부적절하게 업데이트하는 다른 방법이있었습니다. 고맙습니다. 나는 가능한 한 빨리 대답을 받아 들일 것입니다. 나 같은 다른 바보 같은 경우에 대비하여이 방법을 설명하는 편집을해야 할 수도 있습니다 (즉, 문제의 변수를 final로 설정하여 변경하지 않아야하는지 확인하십시오). – HXSP1947