2013-06-03 2 views
0

Я пишу объект передачи, который просто отображает объект, возвращающийся с веб-службы на мой собственный объект: Автомобиль А до автомобиля B.Игнорирование нулевых полей при сопоставлении с одного объекта на другой (объект переноса) в java?

a Класс автомобиля имеет свойство пробега.

CarB.setMileage(CarA.getMileage()); //if the CarA.getMileage() is null, then my setter fails and I get a nullPointerException 

У меня есть 50 полей, и я исправлю, что мне просто нужно написать 50 отдельных проверок для null перед установкой моих полей?

т.е.

if (CarA.getMileage() != null) { 
    CarB.setMileage(CarA.getMileage()); 
} 

Есть ли способ избежать написания 50 обособленным, если !=null проверки заявления?

+1

Покажите нам код сеттера. Это должно быть больше, чем 'this.mileage = newVal;' –

+0

Вы уверены, что 'CarA.getMileage()' является 'null', а не только' CarA'. –

ответ

1

мало общего, но лучший способ в вашем боба Class

function String checkForNull(String str){ 

    //check for null and return corresponding 
} 

общий method, а затем

CarB.setMileage(checkForNull(CarA.getMileage()));

1

Вы можете создать статический метод фабрики в CarB:

// carA is of type CarA returned by the web service 
CarB carB = CarB.fromCarA(carA); 

Все нулевые чеки и т.д. затем будет сделано в этом заводским способом. Пример кода:

public class CarB 
{ 
    //.... 

    public static CarB fromCarA(final CarA carA) 
    { 
     if (carA == null) 
      throw new NullPointerException("Where is my car???"); 

     final CarB ret = new CarB(); 

     // Supposing CarA returns an Integer... 
     final Integer mileage = carA.getMileage(); 
     if (mileage != null) 
      ret.setMileage(mileage); 

     // etc etc, then 
     return ret; 
    } 

    // etc 
} 
+0

Или, например, 'carB.setMileageFromCar (carA)', если вы не хотите конструктор. – chessbot

+0

@chessbot yup, но для этого требуется один такой метод для каждого атрибута, который вы хотите установить ... – fge

+0

Достаточно честный; похоже, что его код хотел установить атрибуты, а не построить новый автомобиль; возможно, что-то вроде 'carB.setFrom (carA)'. Во всяком случае, это не имеет особого значения. – chessbot

2

Попробуйте использовать отображение Бульдозер. Это хороший инструмент, и он также помогает игнорировать нулевые значения. Его можно использовать для двумерного программирования объекта и использования XML. Вы не должны указывать какое-либо сопоставление между двумя полями объектов, если имена атрибутов в них одинаковы. Ниже приводится ссылка:

http://dozer.sourceforge.net/documentation/faq.html

+0

Хороший проект, но он выглядит как кувалда, чтобы раздавить ошибку здесь ... – fge

+0

Спасибо fge. Я думаю, что ОП - это только один случай, и может быть, есть больше случаев, которые могут помочь нашему другу. Так предложил. –

+0

Для вашего удаленного ответа: см. [Что является приемлемым ответом?] (Http://meta.stackexchange.com/a/118694/182862). В своей нынешней форме ваш ответ не применяется для пунктов с 8 по 12, поэтому я опубликовал комментарий и отказал в этом, чтобы не решить проблему. –

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