克隆一例

类别:Java 点击:0 评论:0 推荐:

       在一般的开发过程中,往往要遇到从数据库中取出数据组成值对象(通常叫做VO),然后放在列表集中,并传回调用端的情况。在还没有接触到clone的时候,程序往往要在while块中构造VO实例,但这样做并不推荐,甚至应该极力避免,因为会造成程序效率的低下。在使用clone技术以后,程序运行效率有所改善,以下是常用写法,希望对大家有所帮助。

支持clone的VO看起来像这样:

package com.XXX;

import java.util.*;

public class TempJob implements Cloneable {        //声明其可被clone

  private String Jbnr=null;
  private String Jbdw=null; 

  public Object clone() {
      try {
          return super.clone();                               //返回clone以后的对象
          }
          catch (CloneNotSupportedException e) {
              System.out.println(e.toString());
          }

  public void setJbnr(String Jbnr){
      this.Jbnr=Jbnr;
  }

  public String getJbnr(){
      return Jbnr;
  }

  public void setJbdw(String Jbdw){
      this.Jbdw=Jbdw;
  }
 
  public String getJbdw(){
      return Jbdw;
  }
}


对于调用VO的类,像这样:

package com.XXX;
import java.sql.*;
import java.util.*;

public class DoJob{

  private Connection con;
  private Statement stmt;
  private ResultSet rs;
  private ArrayList lis=new ArrayList();

  public ArrayList query(String a){                             
      String sql="";
      sql="select a.*,b.name from temp_job a, user_basic b "
          +"where a.userid = b.userid order by a.wcqk";
      try{
          stmt=con.createStatement();
          rs=stmt.executeQuery(sql);   
          TempJob job=new TempJob();                //只要一个实例
          while (rs.next()){
              job.setJbnr(rs.getString(1));
              job.setJbdw(rs.getString(2));
              lis.add(job.clone());                         //返回被clone对象
          }
    }
    catch(SQLException e){
      System.out.println(e.toString());
    }
    finally {                          
      this.rs=null;
      this.stmt=null;
      con.close();
    }   
    return lis;
  }
}

本文地址:http://com.8s8s.com/it/it14825.htm