2012-06-14 3 views
0

이 코드는 적절한 벡터에 개체를 추가 할 것이라고 생각했지만 null 포인터 예외가 발생했습니다. actors.add(a)이 예상대로 작동하므로 Actor a이 존재한다는 것을 알고 있습니다. 객체가 인터페이스를 구현하는지 테스트하는 방법을 연구했지만 인터페이스의 인스턴스를 필요로하는 메소드를 호출하는 대신 인터페이스의 메소드를 호출하는 자세한 방법을 찾을 수있는 모든 예제를 살펴 보았습니다. 이 코드가 인터페이스를 올바르게 확인하지 않는 이유는 무엇입니까?

public void addActor(Actor a) { 
    actors.add(a); // actors is a vector 
    if (a instanceof Drawable) { 
     panel.addDrawable((Drawable) a); 
    } 
} 

그리고 패널의

:

public void addDrawable(Drawable d) { 
    images.add(d); // images is a vector 
} 
+4

잘 벡터에 null을 추가 할 수 있습니다. –

+1

질문이 무엇인지 말할 수 없습니다 - "인터페이스의 인스턴스를 필요로하는 메서드를 호출하는 대신 인터페이스의 메서드를 호출"한다는 것은 무슨 뜻입니까? –

+1

당신이 얻고있는 NPE를위한 유일한 장소는 당신이 긍정적 인 Actor A가 null이 아니라고 말하면,'panel.addDrawable ((Drawable) a);'행이 그것입니다. panel '은 우리에게 보여주지 않는 다른 코드가 없으면 널이어야합니다. 예외 사항 자체를 표시하는 것이 좋을 것입니다 .. – Austin

답변

1

나는 널 포인터 예외를 받고 있어요. actors.add(a)이 예상대로 작동하므로 Actor a이 존재한다는 것을 알고 있습니다.

Vector.add(null)NullPointerException을 발생시키지 않습니다. 이 벡터로 지정된 요소가 포함 된 경우 javadoc

public boolean contains(Object o)

반환합니다 true을 말한다. 이 벡터가 적어도 하나의 요소 e ((o==null ? e==null : o.equals(e)))를 포함하는 경우에만 true를 반환합니다.

+0

Oh. Dang. 고마워.하지만 지금은 나 뿐이야. 'addActor (new Square());')로 호출했기 때문에 실제로 어떻게 문제가되는지 알지 못했습니다. 그리고 인터페이스를 참조하는 코드를 제거하고 System.out.println 테스트를 추가하면 모든 것이 그 것처럼 보입니다. – ChemicalRocketeer

+1

@ 테크노, NPE의 최상위 스택이 그 방법에 있다면,'actors' 또는'panel'은'null'입니다. –

관련 문제