
先前Mix已經實作了2個bean,Magazine與Book,這次要將Magazine的所有field值copy到Book中,不用傳統的方式,單1個field取值,再依序設定,而是用copyProperties()來處理。
Magazine
package org.openyu.java.commons.beanutils; import org.apache.commons.lang.builder.ToStringBuilder; import org.apache.commons.lang.builder.ToStringStyle; /** * The Class Magazine. */ public class Magazine { /** The id. */ private long id; /** The name. */ private String name; /** The price. */ private int price; /** The author. */ private Author author; ... }
Book
package org.openyu.java.commons.lang; import org.apache.commons.lang.builder.CompareToBuilder; import org.apache.commons.lang.builder.EqualsBuilder; import org.apache.commons.lang.builder.HashCodeBuilder; import org.apache.commons.lang.builder.ToStringBuilder; import org.apache.commons.lang.builder.ToStringStyle; /** * The Class Book. */ // 支援比較 public class Book implements Comparable{ /** The id. */ private long id; /** The name. */ private String name; ... }
@Test public void copyProperties() throws Exception { Magazine magazine = new Magazine(); magazine.setId(1L); magazine.setName("OpenYu"); magazine.setPrice(1000); // Author author = new Author(); author.setId(1L); author.setName("Java"); magazine.setAuthor(author); // Book book = new Book(); BeanUtils.copyProperties(book, magazine); System.out.println(magazine); System.out.println(book); assertEquals(magazine.getId(), book.getId()); assertEquals(magazine.getName(), book.getName()); }
Mix利用copyProperties(),很快的就完成2個物件中field的複製,代碼也精簡了許多,不會有一大堆getter/setter的method充斥其中。
console查看其結果。
Magazine[id=1,name=OpenYu,author=org.openyu.java.commons.beanutils.Author@68e6ff0d[id=1,name=Java]] Book[id=1,name=OpenYu]
沒有留言:
張貼留言