JAva反射学習四
4330 ワード
この部分からjava反射の実際の運用を学び、いくつかの大規模なデータベースに関連するプロジェクトではjavaの反射がよく使われています.例えば、以前やった保険プロジェクトでは、座席に電話がかかってきて記録操作を行い、最後に記録が完了したら保存をクリックすると、ページに入力されたデータをデータベースの一連のテーブルに保存します.この一連の表をひとまずTで表す.その後、清算システムはT表のデータをJMSを通じて相応の支社に清算し、それから支社は費用を支払う操作を行い、費用を払うことに成功した後、支社の清算プログラムはまたすべての費用を見るデータを本社にアップロードします.最後に本社は支払いに成功したマークを受け取ってから回転操作を行い、回転数はすべてのTテーブルのデータをCテーブルにコピーする.この機能を完了するには2つの方法があります.1つは、Cテーブルオブジェクトごとにset操作を直接行い、Tテーブルオブジェクトの対応する値を付与することです.テーブルが多い場合、この部分のコードは非常に多いので、取ることができません.もう1つは反射を利用して実現することである.反射を使用してオブジェクトのコピー操作を実現する方法を見てみましょう.
1、ソースオブジェクト
2、目標オブジェクト
3、テストクラス
詳細については、以下を参照してください.http://www.16boke.com
1、ソースオブジェクト
package com.reflectcopy.dto;
import java.io.Serializable;
/**
* T
* @author ibm
*
*/
public class TModel implements Serializable
{
private static final long serialVersionUID = 1L;
private int id;
private String name;
private String pass;
private String sex;
public TModel(){}//
public TModel(int id, String name, String pass, String sex) {
super();
this.id = id;
this.name = name;
this.pass = pass;
this.sex = sex;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPass() {
return pass;
}
public void setPass(String pass) {
this.pass = pass;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
}
2、目標オブジェクト
package com.reflectcopy.dto;
import java.io.Serializable;
/**
* C
* @author ibm
*
*/
public class CModel implements Serializable{
private static final long serialVersionUID = 1L;
private int id;
private String name;
private String pass;
private String sex;
public CModel(){}//
public CModel(int id, String name, String pass, String sex) {
super();
this.id = id;
this.name = name;
this.pass = pass;
this.sex = sex;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPass() {
return pass;
}
public void setPass(String pass) {
this.pass = pass;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
}
3、テストクラス
package com.reflectcopy.test;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import com.reflectcopy.dto.CModel;
import com.reflectcopy.dto.TModel;
public class ReflectCopyTest {
public Object copy(Object sourceObject , Class targetObject) throws Exception {
//
Class<?> sourceclassType = sourceObject.getClass();
Class<?> targetclassType = targetObject;
//
Object objectCopy = targetclassType.getConstructor(new Class[] {}).newInstance();
//
Field fields[] = targetclassType.getDeclaredFields();
for (int i = 0; i < fields.length; i++) {
Field field = fields[i];
String fieldName = field.getName();
if(!fieldName.equals("serialVersionUID")){//
String firstLetter = fieldName.substring(0, 1).toUpperCase();
// getXXX()
String getMethodName = "get" + firstLetter + fieldName.substring(1);
// setXXX()
String setMethodName = "set" + firstLetter + fieldName.substring(1);
// getXXX()
Method getMethod = sourceclassType.getMethod(getMethodName, new Class[] {});
// setXXX()
Method setMethod = targetclassType.getMethod(setMethodName, new Class[] { field.getType() });
// getXXX()
Object value = getMethod.invoke(sourceObject, new Object[] {});
// setXXX()
setMethod.invoke(objectCopy, new Object[] { value });
}
}
return objectCopy;
}
public static void main(String[] args) throws Exception {
TModel tModel = new TModel(1,"test","password"," ");
CModel cModel = (CModel) new ReflectCopyTest().copy(tModel,CModel.class);
System.out.println("Copy information:" + cModel.getId() + " " + cModel.getName() + " " + cModel.getPass() + " " + cModel.getSex());
}
}
詳細については、以下を参照してください.http://www.16boke.com