我在Spring框架中編寫了一些java代碼。Java - 如何簡化我的java
我有兩個豆,人和person1。它們的結構略有不同,也就是說每個變量的名稱略有不同。
我試圖從一個bean複製到另一個的細節。如果值不爲null,我只想複製該值。我見過一個名爲BeanUtils的API,但無論它是否爲null,都會複製它。
這裏是我的代碼:
if (person != null) {
if (person.getAddressDetails() != null) {
if (person.getAddressDetails().getStreetNumber() != null) {
person1.getAddressDetails().setStreetNo(person.getAddressDetails().getStreetNumber());
}
if (person.getAddressDetails().getStreetName() != null) {
person1.getAddressDetails().setStreetName(person.getAddressDetails().getStreetName());
}
}
if (person.getHomeDetails() != null) {
if (person.getHomeDetails().getPhoneNumber() != null) {
person1.getHomeDetails().setSPhoneNo(person.getHomeDetails().getPhoneNumber());
}
}
}
我有大約40個節點需要被複制,這將創造這麼多醜陋的代碼。有沒有人有更好的方法來做到這一點?也許如果我做了一個映射或什麼,然後通過它循環?不確定。
如果沒有,有沒有人知道我是否可以讓BeanUtils運行副本而不復制空值?
原因是第二個bean person1已經有一堆值。我只想覆蓋,如果有新值覆蓋它。
像往常一樣,變量是一個更大的系統的一部分,我不能標準化名稱。
感謝
如果所有值都由標準getter/setter方法定義,則可以使用反射來查找字段,並且只在字段不爲空時執行復制。不過,你可能會爲了try/catch塊和反射代碼而關閉if/else塊。 – BobG 2011-05-04 02:15:06
我不熟悉反射,你能解釋一下嗎? – Jason 2011-05-04 02:42:24
你沒有明確地說出來,但我是否正確地假設person和person1是同一類的實例? – 2011-05-04 03:02:44