java學(xué)習(xí)

          java學(xué)習(xí)

           

          Java泛型

          2. 泛型類:泛型只在編譯時期有效,編譯后的字節(jié)碼文件中不存在有泛型信息!

          1. 泛型方法:

          public class GenericDemo {



          // 定義泛型方法
          public <K,T> T save(T t,K k) {
          return null;
          }
          // 測試方法
          @Test
          public void testMethod() throws Exception {
          // 使用泛型方法:  在使用泛型方法的時候,確定泛型類型
          save(1.0f, 1);
          }
          }

          2. 泛型類:

          public class GenericDemo<T> {



          // 定義泛型方法
          public <K> T save(T t,K k) {
          return null;
          }
          public void update(T t) {

          }

             

              // 測試方法

              @Test

              public void testMethod() throws Exception {

                 

                  // 泛型類:  在創(chuàng)建愛泛型類對象的時候,確定類型

                  GenericDemo<String> demo = new GenericDemo<String>();

                  demo.save("test", 1);

              }

          }
          3. 泛型接口:
          /**
           * 泛型接口
           * @author Jie.Yuan
           *
           * @param <T>
           */
          public interface IBaseDao<T> {
          void save(T t );
          void update(T t );
          }
          泛型接口類型確定: 實現(xiàn)泛型接口的類也是抽象,那么類型在具體的實現(xiàn)中確定或創(chuàng)建泛型類的時候確定。
          泛型的反射

          /**

           * 所有dao的公用的方法,都在這里實現(xiàn)

           * @author Jie.Yuan

           *

           */

          public class BaseDao<T>{

             

              // 保存當(dāng)前運(yùn)行類的參數(shù)化類型中的實際的類型

          private Class clazz;


          // 表名
          private String tableName;
          // 構(gòu)造函數(shù): 1. 獲取當(dāng)前運(yùn)行類的參數(shù)化類型; 2. 獲取參數(shù)化類型中實際類型的定義(class)
          public BaseDao(){
          //  this  表示當(dāng)前運(yùn)行類  (AccountDao/AdminDao)
          //  this.getClass()  當(dāng)前運(yùn)行類的字節(jié)碼(AccountDao.class/AdminDao.class)
          //  this.getClass().getGenericSuperclass();  當(dāng)前運(yùn)行類的父類,即為BaseDao<Account>
          //                                           其實就是“參數(shù)化類型”, ParameterizedType   
          Type type = this.getClass().getGenericSuperclass();
          // 強(qiáng)制轉(zhuǎn)換為“參數(shù)化類型”  【BaseDao<Account>】
          ParameterizedType pt = (ParameterizedType) type;
          // 獲取參數(shù)化類型中,實際類型的定義  【new Type[]{Account.class}】
          Type types[] =  pt.getActualTypeArguments();
          // 獲取數(shù)據(jù)的第一個元素:Accout.class
          clazz = (Class) types[0];
          // 表名  (與類名一樣,只要獲取類名就可以)
          tableName = clazz.getSimpleName();
          }

          /**
          * 主鍵查詢
          * @param id 主鍵值
          * @return      返回封裝后的對象
          */
          public T findById(int id){
          /*
          * 1. 知道封裝的對象的類型
          * 2. 表名【表名與對象名稱一樣, 且主鍵都為id】
          * 即,
          *  ---》得到當(dāng)前運(yùn)行類繼承的父類  BaseDao<Account>
          *   ----》 得到Account.class
          */
          String sql = "select * from " + tableName + " where id=? ";
          try {
          return JdbcUtils.getQuerrRunner().query(sql, new BeanHandler<T>(clazz), id);
          } catch (SQLException e) {
          throw new RuntimeException(e);
          }
          }
          /**
          * 查詢?nèi)?/span>
          * @return
          */
          public List<T> getAll(){
          String sql = "select * from " + tableName ;
          try {
          return JdbcUtils.getQuerrRunner().query(sql, new BeanListHandler<T>(clazz));
          } catch (SQLException e) {
          throw new RuntimeException(e);
          }
          }
          }

          posted on 2017-11-14 17:34 楊軍威 閱讀(123) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
          博客園   IT新聞   Chat2DB   C++博客   博問  
           

          導(dǎo)航

          統(tǒng)計

          常用鏈接

          留言簿

          隨筆檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 育儿| 乐昌市| 游戏| 北碚区| 滕州市| 广平县| 孟津县| 景宁| 武义县| 邻水| 都安| 石嘴山市| 高要市| 牡丹江市| 金堂县| 丹寨县| 增城市| 界首市| 温州市| 北宁市| 府谷县| 沅陵县| 宣城市| 台南县| 广东省| 牡丹江市| 康马县| 青州市| 阜康市| 焦作市| 镇原县| 嵊州市| 子洲县| 霍林郭勒市| 辽中县| 济宁市| 广州市| 大邑县| 美姑县| 隆安县| 武陟县|