泛型(Generic)-反射泛形-Dao
生活随笔
收集整理的這篇文章主要介紹了
泛型(Generic)-反射泛形-Dao
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
JDK5中的泛形允許程序員在編寫集合代碼時,就限制集合的處理類型,從而把原來程序運行時可能發生問題,轉變為編譯時的問題,以此提高程序的可讀性和穩定性(尤其在大型程序中更為突出)。 注意:泛型是提供給javac編譯器使用的,它用于限定集合的輸入類型,讓編譯器在源代碼級別上,即擋住向集合中插入非法數據。 ??但編譯器編譯完帶有泛形的java程序后,生成的class文件中將不再帶有泛形信息,以此使程序運行效率不受到影響,這個過程稱之為“擦除”。 泛形的基本術語,以ArrayList<E>為例:<>念著typeof ?ArrayList<E>中的E稱為類型參數變量 ?ArrayList<Integer>中的Integer稱為實際類型參數 ?整個稱為ArrayList<E>泛型類型 ?整個BaseDao<Type>ParameterizedType/Type參數化的類型 泛型類 如果一個類多處都要用到同一個泛型,這時可以把泛形定義在類上(即類級別的泛型),語法格式如下:
? public class GenericDao<T> {
? private T field1;
? public void save(T obj){}
? public T getId(int id){}
? }
注意,靜態方法不能使用類定義的泛形,而應單獨定義泛形。 --domain 1、BaseBean 1 //基礎Bean 2 public class BaseBean { 3 public int id; 4 public String title; 5 public BaseBean(){} 6 public int getId() { 7 return id; 8 } 9 public void setId(int id) { 10 this.id = id; 11 } 12 public String getTitle() { 13 return title; 14 } 15 public void setTitle(String title) { 16 this.title = title; 17 } 18 }?2、版塊
1 //版塊 2 public class Type extends BaseBean{ 3 4 }?
3、主題 1 //主題 2 public class Topic extends BaseBean{ 3 private String name; 4 public Topic(){} 5 public String getName() { 6 return name; 7 } 8 public void setName(String name) { 9 this.name = name; 10 } 11 } --dao 1、BaseDao 1 import java.lang.reflect.ParameterizedType; 2 import java.lang.reflect.Type; 3 import java.sql.SQLException; 4 import org.apache.commons.dbutils.QueryRunner; 5 import org.apache.commons.dbutils.handlers.BeanHandler; 6 import cn.itcast.java.util.JdbcUtil; 7 8 public class BaseDao<T> { 9 private Class clazz; 10 private String tableName; 11 public BaseDao(){ 12 //取得BaseDao的字節碼對象 13 Class baseDaoClass = this.getClass(); 14 //取得BaseDao的泛型類型 15 Type type = (Type) baseDaoClass.getGenericSuperclass(); 16 //將Type轉發ParameterizedType,即取得BaseDao<Type>的參數化類型 17 ParameterizedType pt = (ParameterizedType) type; 18 //取得參數化類型中的實例參數類型,即Type,返回的是一個數組,取第一個 Map<String,Integer> 對應[0] [1] 19 this.clazz = (Class) pt.getActualTypeArguments()[0]; 20 int index = this.clazz.getName().lastIndexOf("."); 21 //表名 22 this.tableName = this.clazz.getName().substring(index+1).toLowerCase(); 23 } 24 public T findTById(int id) throws SQLException { 25 T t = null; 26 QueryRunner runner = new QueryRunner(JdbcUtil.getDataSource()); 27 String sql = "select * from " + tableName + " where id = ?"; 28 t = (T) runner.query(sql, id, new BeanHandler(clazz)); 29 return t; 30 } 31 }? 2、TypeDao
1 import cn.itcast.java.domain.Type; 2 3 public class TypeDao extends BaseDao<Type>{ 4 }3、TopicDao
1 import cn.itcast.java.domain.Topic; 2 3 public class TopicDao extends BaseDao<Topic>{ 4 }?--test
1 import cn.itcast.java.dao.dao3.ReplyDao; 2 import cn.itcast.java.dao.dao3.TopicDao; 3 import cn.itcast.java.dao.dao3.TypeDao; 4 import cn.itcast.java.domain.Reply; 5 import cn.itcast.java.domain.Topic; 6 import cn.itcast.java.domain.Type; 7 8 public class TestDao3 { 9 public static void main(String[] args) throws Exception { 10 TypeDao typeDao = new TypeDao(); 11 Type type = typeDao.findTById(3); 12 System.out.println(type.getId()+":"+type.getTitle()); 13 System.out.println("==============================="); 14 TopicDao topicDao = new TopicDao(); 15 Topic topic = topicDao.findTById(3); 16 System.out.println(topic.getId()+":"+topic.getTitle() + ":" + topic.getName()); 17 System.out.println("==============================="); 18 ReplyDao replyDao = new ReplyDao(); 19 Reply reply = replyDao.findTById(3); 20 System.out.println(reply.getId() + ":" + reply.getTitle()); 21 } 22 }?
?
轉載于:https://www.cnblogs.com/hacket/archive/2013/04/29/3050377.html
總結
以上是生活随笔為你收集整理的泛型(Generic)-反射泛形-Dao的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一周小记(五)
- 下一篇: Struts 2+Spring 3+Hi