2016-03-31 25 views
0

Bir parça kodum var, her zaman kullanılıyor, ancak çok gereksiz görünüyordu ve artık yedeklemeyi yapmak için ne yapabilirim. Nesnelerinizin uzaktan fasulye gibi bakarızjava kodunu ve nasıl iyi görünmesini sağlayın

 if(CommonUtil.isNull(second.getProvince())) { 
      second.setProvince(first.getProvince()); 
     } 

     if(CommonUtil.isNull(second.getCity())) { 
      second.setCity(first.getCity()); 
     } 

     if(CommonUtil.isNull(second.getDistrict())) { 
      second.setDistrict(first.getDistrict()); 
     } 

     if(CommonUtil.isNull(second.getAddress())) { 
      second.setAddress(first.getAddress()); 
     } 

     ........ 
+1

Bir döngüde yansıması veya lambdas kullanabilirsiniz. –

+1

[Dozer] 'i (http://dozer.sourceforge.net/) kullanabilirsiniz ve eğer önceden belirlenen alanları göz ardı etmemek kaydıyla kendi çevirmen/haritanızı sağlayabilirsiniz ([ programlama api kullanarak alan başına boş veya boş dize değerleri eşlemek?] (http://stackoverflow.com/questions/19256952/how-can-i-tell-dozer-to-bypass-mapping-null-or-empty- dize değerleri başına alanına-uSI)). – Thomas

+0

Lambda'yı bu dava hakkında nasıl kullanabilirim? – NattyQ

cevap

0

Verilerinizin sınıflarında bu yöntemi yazıp bir satır kod ile tüm alanların boş kontrolünü yapabilirsiniz. Benim kod tavsiyem aşağıda gibidir:

public boolean copyIfNull(Object o) 
{ 

     Class<?> clazz = this.getClass(); 
     Field[] fields = clazz.getDeclaredFields(); 

     for(Field field : fields) 
     { 
     try { 
      Object fieldValue = field.get(this); 
      if (fieldValue == null) 
      { 
       field.set(this, field.get(o)); 
       return false; 
      } 
     } 

     catch (Exception e) { 
      System.err.println("Field value could not be obtained"); 
      e.printStackTrace(); 
      return false; 
     } 
     } 


    return true; 

} 

Ve böyle ana bu yöntemi arayacak:

second.copyIfNull(first) 
+0

tadı güzel, teşekkürler – NattyQ

0

, sen java.beans.Introspector ve BeanInfo bir göz olabilir. Kabaca çizgisinde

:

BeanInfo bi = Introspector.getBeanInfo(MyObjectClass.class); 
for(PropertyDescriptor p : bi.getPropertyDescriptors()) { 
    // perform null-check 
    // invoke read on source object via read method delivered by p.getReadMethod() 
    // write to target via method delivered by p.getWriteMethod() 
} 
İlgili konular