2011-11-28 19 views
15
'a dönüştürür

BeanUtils.copyProperties (dest, src) 'nin garip bir yan etkisi olduğunu fark ettim. Tüm null Integers (büyük olasılıkla Long, Date vb.) Her iki nesnede de 0'a dönüşür: source (sic!) Ve destination. Versiyon: commons-beanutils-1.7.0BeanUtils.copyProperties, tamsayı null değerini 0

javadoc: özellik adları aynı olan tüm vakalar için hedef fasulye origin fasulye

Kopya özellik değerleri. Örneğin

:

class User { 
    Integer age = null; 
    // getters & setters 
} 
... 
User userDest = new User(); 
User userSrc = new User(); 
BeanUtils.copyProperties(userDest, userSrc); 
System.out.println(userDest.getAge()); // 0 
System.out.println(userSrc.getAge()); // 0 

Çok o kaynak nesne aslında değiştirilmiş Buggy edilebilir. Nesnenin "gerçek" kopyasını boş değerle yapmak için en iyi çözüm nedir?

+0

sürümüdür? – Dewfy

+0

commons-beanutils-1.7.0 ile ilgili bazı problemlerim vardı, – smas

cevap

14

Tamam ben ancak bu sınıflar kullanırken ben rastladım bu iki sınıf arasında büyük bir fark vardır this post

buldum: BeanUtils otomatik tip dönüştürme yapar ve PropertyUtils etmez.

Örneğin: BeanUtils ile bir String sağlayan tarafından çift değerli bir özellik ayarlayabilirsiniz. BeanUtils, mülkün türünü kontrol edecek ve , String'i bir çift haline getirecektir. PropertyUtils ile, özellik ile aynı türde bir değer nesnesi sağlamak için her zaman var, bu nedenle bu örneğinde bir çift.

Otomatik dönüşüm bu durumda gerekli değildir, bu nedenle daha iyi bir seçim PropertyUtils sınıf beanutils ait

14

http://commons.apache.org/beanutils/api/org/apache/commons/beanutils/ConvertUtilsBean.html denetleniyor, Tamsayı dönüştürme varsayılanı 0'dır. Bunun nedeni, burada hedef türün ilkel int veya başvuru int olduğu ve ilkel int'nin null olarak ayarlanamamasıdır.

Dönüştürücü için Tamsayı'yı geçersiz kılabilir ve varsayılan değeri boş olan bir ile değiştirebilirsiniz.

GÜNCELLEME: Kullanımı

import org.apache.commons.beanutils.converters.IntegerConverter; 

IntegerConverter converter = new IntegerConverter(null); 
BeanUtilsBean beanUtilsBean = new BeanUtilsBean(); 
beanUtilsBean.getConvertUtils().register(converter, Integer.class); 

IntegerConverter için kaynak koduna bir göz atın - eğer yapıcı varsayılan değeri ayarlayın.

+0

no'lu mesaja eklendi. Yani ne yapmam gerekiyor bu dönüştürücü null - default değerini döndürmek/değiştirmek – smas

İlgili konular