2013-02-16 2 views
2

при попытке клонирования массива объектов, я получаю сообщение об ошибке, когда массив не полностью заполнен. если список заполнен, все работает отлично!клонирование массива объектов в java trowing, указывающее на исключение null

это мой код:

public Object clone() throws CloneNotSupportedException { 
     EmployeeList listBackup = new EmployeeList(); 
     for (Employee employeeObj : listEmployee){ 
      listBackup.add((Employee) employeeObj.clone()); 
     } 
     return listBackup; 
    } 

есть ли другой способ переписать этот код, когда элемент в массиве равно нулю?

+0

Возможный дубликат [Что такое исключение Null Pointer?] (Http://stackoverflow.com/questions/218384/what-is-a-null-pointer -exception) –

+1

Это НЕ «массив» объектов. Это «список» объектов. Если бы это был действительно массив Java, вы могли бы просто использовать встроенный метод 'clone()', и он отлично справился бы с 'null'. –

ответ

0

Сделайте нулевую проверку.

for (Employee employeeObj : listEmployee){ 
    if (employeeObj != null) 
    listBackup.add((Employee) employeeObj.clone()); 
} 

Или, если вы хотите, чтобы break цикл, как только будет найдено нулевое значение:

for (Employee employeeObj : listEmployee){ 
    if (employeeObj == null) 
    break; 
    listBackup.add((Employee) employeeObj.clone()); 
} 

Или просто вернуться, как только вы столкнетесь с null ссылкой

for (Employee employeeObj : listEmployee){ 
     if (employeeObj == null) 
     return listBackup; 
     listBackup.add((Employee) employeeObj.clone()); 
    } 

Конечно, если можно, избегайте того, чтобы ваш массив/список содержал нулевые значения, и, как отметил @StephenC, если это фактический массив, вы можете клонировать его. Однако это зависит от спецификаций присваивания, другой реализации кода и того, что позволяет ваш профессор.

+0

есть ли способ поставить это условие внутри цикла? поэтому, когда его значение null просто прерывает цикл и возвращает список? это прекрасно работает. Но я полагаю, что если список слишком длинный, цикл не заканчивается до тех пор, пока последний элемент массива не будет? – Pisike007

+0

@PatriciaQuintanilla просто «ломается», как только вы сталкиваетесь с ссылкой «null». Отредактировал ответ. –

+0

Мне жаль, что я не мог это сделать, это для домашней работы, и я абсолютно запретил использовать разрыв в цикле. правило моего профессора никогда не будет использовать его, если оно не указано в инструкции switch! – Pisike007

0

Я не уверен, что вы поняли ответ A-C, он дал вам два отдельных решения, один с предложением о перерыве и один без. Первое решение s/he дало ответы на ваш вопрос точно :)

+0

true .. true! не понимала, как она это делает! Спасибо, что указали !!! – Pisike007

+0

He * :-), и первое решение будет перебирать по всему массиву, что является * плохим * до степени. Возвращение - это «самый приятный» вариант без перерыва. –

+0

Да, я думаю, я поеду с этим .. надеюсь, что он не берет очки из-за этого! Большое спасибо. Я с ума схожу с этой проблемой! – Pisike007

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