<code>/**</code>
<code> </code><code>* 兩個相同屬性的對象指派</code>
<code> </code><code>*</code>
<code> </code><code>* @param sourceObj</code>
<code> </code><code>* @param targetObj</code>
<code> </code><code>*/</code>
<code>public</code> <code>static</code> <code>void</code> <code>entityPropertiesCopy(Object sourceObj, Object targetObj) {</code>
<code> </code><code>if</code> <code>(sourceObj == </code><code>null</code> <code>|| targetObj == </code><code>null</code><code>)</code>
<code> </code><code>return</code><code>;</code>
<code> </code><code>Class targetClass = </code><code>null</code><code>;</code>
<code> </code><code>//用java反射機制就可以, 可以做成通用的方法, 隻要屬性名和類型一樣</code>
<code> </code><code>Field[] sourceFields = </code><code>null</code><code>;</code>
<code> </code><code>try</code> <code>{</code>
<code> </code><code>targetClass = targetObj.getClass();</code>
<code> </code><code>sourceFields = sourceObj.getClass().getDeclaredFields();</code>
<code> </code><code>} </code><code>catch</code> <code>(Exception e) {</code>
<code> </code><code>e.printStackTrace();</code>
<code> </code><code>}</code>
<code> </code><code>String fieldName = </code><code>""</code><code>;</code>
<code> </code><code>Class fieldType = </code><code>null</code><code>;</code>
<code> </code><code>for</code> <code>(</code><code>int</code> <code>i = </code><code>0</code><code>; i < sourceFields.length; i++) {</code>
<code> </code><code>try</code> <code>{</code>
<code> </code><code>fieldName = sourceFields[i].getName();</code>
<code> </code><code>fieldType = sourceFields[i].getType();</code>
<code> </code><code>Field targetField = targetClass.getDeclaredField(fieldName);</code>
<code> </code><code>if</code> <code>(targetField != </code><code>null</code> <code>&& targetField.getType().equals(fieldType)) {</code>
<code> </code><code>Method sourceGetter = sourceObj.getClass().getMethod(getGetMethodName(fieldName));</code>
<code> </code><code>Method targetSetter = targetObj.getClass().getMethod(getSetMethodName(fieldName), </code><code>new</code> <code>Class<?>[]{fieldType});</code>
<code> </code><code>Object fieldValue = sourceGetter.invoke(sourceObj);</code>
<code> </code><code>if</code> <code>(fieldValue != </code><code>null</code><code>) {</code>
<code> </code><code>targetSetter.invoke(targetObj, </code><code>new</code> <code>Object[]{fieldValue});</code>
<code> </code><code>}</code>
<code> </code><code>}</code>
<code> </code><code>} </code><code>catch</code> <code>(NoSuchFieldException e) {</code>
<code> </code><code>} </code><code>catch</code> <code>(Exception e) {</code>
<code> </code><code>e.printStackTrace();</code>
<code> </code><code>}</code>
<code>}</code>
<code>public</code> <code>static</code> <code>String getGetMethodName(String fieldName) {</code>
<code> </code><code>String result = fieldName.substring(</code><code>0</code><code>, </code><code>1</code><code>).toUpperCase() + fieldName.substring(</code><code>1</code><code>);</code>
<code> </code><code>return</code> <code>"get"</code> <code>+ result;</code>
<code>public</code> <code>static</code> <code>String getSetMethodName(String fieldName) {</code>
<code> </code><code>return</code> <code>"set"</code> <code>+ result;</code>
本文轉自wauoen51CTO部落格,原文連結:http://blog.51cto.com/7183397/1915661 ,如需轉載請自行聯系原作者