2012-06-14 2 views
0

Я думал, что этот код добавит объект к соответствующим векторам, но я получаю исключение из null-указателя. Я знаю, Actor a существует, потому что actors.add(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

Вы можете добавить нуль в векторы просто отлично. –

+1

Я не могу сказать, в чем вопрос: что вы подразумеваете под «вызовом метода интерфейса вместо вызова метода, который требует экземпляр этого интерфейса»? –

+1

Единственное возможное место для NPE, которое вы получаете (если вы говорите, что вы уверены, что Актор a не является нулевым, тогда '' панель.addDrawable ((Drawable) a); 'строка должна быть такой.' panel_ должен быть нулевым, если только нет другого кода, который вы нам не показываете. Показывая нам, что само исключение было бы неплохо. – Austin

ответ

1

Я получаю исключения нулевого указателя. Я знаю, Actor a существует, потому что actors.add(a) работает как ожидалось.

Vector.add(null) не поднимет NullPointerException. javadoc говорит

public boolean contains(Object o)

Возвращает true, если этот вектор содержит заданный элемент. Более формально возвращает true тогда и только тогда, когда этот вектор содержит хотя бы один элемент e такой, что (o==null ? e==null : o.equals(e)).

+0

Oh Dang. Спасибо. Но сейчас я только вызывая его с помощью addActor (new Square()); ', поэтому я не вижу, как это действительно может быть проблемой. И когда я удаляю код, ссылающийся на интерфейс, и добавляю тесты System.out.println, все выглядит так, как будто это – ChemicalRocketeer

+1

@Techni. Если верхний стек из вашего NPE находится в этом методе, то либо 'actors', либо' panel' является 'null'. –

Смежные вопросы