我們知道在C++中模板可以很方便的代替任意類型的數據。如下:

1. template<clas,江蘇會計證考試報名,2022年會計從業資格考試報名,2022年江蘇會計從業證報名,2022年江蘇會計從業考試報名,江蘇2022年會計從業資格考試成報名,2022年江蘇會計從業考試,會計電算化考試試題,2022年江蘇會計電算化,江蘇會計電算化試題,江蘇會計電算化考試,江蘇初級會計電算化,江蘇初級會計電算化考試">

免费看欧美黑人毛片-免费看毛片网站-免费看毛片的网站-免费看久久-中文字幕日韩欧美-中文字幕日韩精品一区

您現在的位置:首頁 > IT認證 > JAVA >

Java自定義的應用技巧


我們在JAVA中處處都用到了范型,JAVA中的范型是從C++模板繼承來的,不過JAVA的范型的功能遠遠沒有C++那么強大。
   
    我們知道在C++中模板可以很方便的代替任意類型的數據。如下:
   
    1. template<class T>
   
    2.
   
    3. void show(T x)
   
    4.
   
    5. {
   
    6.
   
    7. cout《x《endl ;
   
    8. }
   
    上面的T可以代表任意類型的數據,這樣不是大大減少了函數的重載次數,提高了效率呢。Java是從C++過來的,理解了C++,java也不在話下。
   
    在Java中自定義范型也可以用在方法上。如下:
   
    1、
   
    //這樣聲明的范型可以代替任意類型數據,我們市場用到的鍵值對Map.Entry<K,V> 不就是給予范型的嗎?
   
    K V都可以代替任意類型的值,但是在java中范型的實際類型必須是引用類型。
   
    1.   <K,V> void get(K k,V v)
   
    2.
   
    3.  {
   
    4.
   
    5.
   
    6.  }
   
    2、Java中的范型不能像C++那么靈活。
   
    1. <T>  T  add(T a,T b)
   
    2.
   
    3. {
   
    4.
   
    5.  //return  a+b   ;//很多人以為java也想C++一樣可以這樣 ,但是不可以 .
   
    6.
   
    7.  return  null;
   
    8.  }
   
    這個返回的null 也是有類型限制的,比如上面的a b分別是Integer和String 那么就會取他們共同的基類Object做為返回值類型,其他的同理。
   
    3、實現任意類型的數組的成員值的交換,注意在自定義范型中范型的實際類型只能是引用數據類型,不能是基本數據類型。
   
    1.  public  static <T> void  swap(T[]a,int x,int y)
   
    2.  {
   
    3.  T  tem  =a[x]  ;
   
    4.  a[x]=a[y]  ;
   
    5.  a[y]=tem ;
   
    6.
   
    7.   }
   
    上面這個方法如果我swap(new Integer[]{1,2,3,4,5},1,2); //這樣就會自動交換下標1 2的值
   
    但是這樣調用就錯了swao(new int[]{1,2,3,5,6},2,3) ; //所以說Java的范型的實際類型只能是引用數據類型
   
    4、
   
    <T extends String> 表示類型只能是String或者String的派生類
   
    <T super String > 表示范型類型只能是String或者String的父類
   
    用法同上
   
    5、下面這個函數利用范型來實現類型自動轉換的功能。
   
    1. public static  <T> T autoConvert(Object obj)
   
    2. //因為返回值是 T標識任意類型 所喲可以 將返回結果賦值給任意類型對象
   
    3.  {
   
    4.  return (T)obj;
   
    5.  }
   
    6.  Object  obj=="";
   
    7.
   
    8.  String str=autoConvert(obj);
   
    可以完成自動轉換,因為范型T代表任意類型,因此他可以賦值給String類型的對象。
   
    6、將任意類型的對象填充到任意類型的數組中,與是fillArray(new Integer[]{2,3,4},"ddd"); 這樣調用是正確的,這樣做忽略類型限制。
   
    1. public  static <T> void  fillArray(T[] a,T b)  //將任意一個對象填充到任意類型的數組
   
    2.{
   
    3. for(int i =0;i<a.length;i++)
   
    4. {
   
    5. a[i] =b ;
   
    6. }
   
    7.}
   
    7、以自定義范型的形式顯示一個集合的數據,下面一個是利用自定義范型一個是利用通配符來實現,但是不同的是利用通配符操作的集合不能向集合中插入元素
   
    但是自定義范型卻可以。原因是通配符代表的集合我們不知道集合內部具體元素 是什么類型 所以 不能對集合進行add操作。
   
    1. public static  <T> void showCollection(Collection<T> col,T  obj)  //利用范型來輸出任意類型集合
   
    2. {
   
    3.  col.add(obj) ;
   
    4.  for(T a:col)
   
    5.  {
   
    6.  System.out.println(a);
   
    7.  }
   
    8.  }
   
    9.
   
    10.  public static void showCollection(Collection<?> col)  //利用范型來輸出任意類型集合
   
    11. {
   
    12.  for(Object obj:col)
   
    13.  {
   
    14.  System.out.println(obj);
   
    15.  }
   
    16.  }
   
    8、如果一個類中多個方法都需要范型,那么就是用類級別的范型。
   
    例如:
   
    1. class  A<E>
   
    2.
   
    3. {
   
    4.
   
    5.  public void  add(E obj){}
   
    6.
   
    7.  public  E  get(){}
   
    8.
   
    9.  private E data;
   
    10. }
   
    這樣聲明范型和在函數前面聲明其實是一樣的,只不過是在類的級別上作用于整個類而已。
   
    9、 要注意范型只是給編譯器看的。
   
    也就是說Vector<Integer> Vector<String> 他們用到的都是同一份字節碼,字節碼只有class文件加載到內存中的時候才有。
   
    所以在一個類中下面2個方法不能同時存在。
   
    void show(Vector<Integer>) {}
   
    void show(Vector<String>){}
   
    這兩個方法都不是重載,因為編譯后要去掉類型信息。

相關文章

無相關信息
更新時間2022-09-16 10:00:15【至頂部↑】
聯系我們 | 郵件: | 客服熱線電話:4008816886(QQ同號) | 

付款方式留言簿投訴中心網站糾錯二維碼手機版

電話:
付款方式   |   給我留言   |   我要糾錯   |   聯系我們




主站蜘蛛池模板: 小舞泳装比基尼套装图片| 网页版抖音| 金枝玉叶电视剧免费观看| 小恩雅骑马舞蹈视频| 热天午后| 试看60秒做受小视频| 老炮儿演员表| 詹妮弗康纳利的电影| 三年级片| 我不是教主漫画免费下拉式| 我的新学校英语作文| 迈克尔·j·福克斯| av888av| 泰坦尼克号电影完整版在线观看| 妈妈的朋友电影日本| 陈颖芝三级| 免费在线观看勇士| 那些年,那些事 电视剧| 离歌吉他谱| 侯怡君| 欧美艹| 牛油果营养价值| 八角笼中电影| 古装发型| 追凶| 活动评价| 中国手抄报| 大红一师| 青春没有遗憾才完美辩论资料| 色戒在线观看| 欧美黑人乱码avxxxx| 无内裤全透明柔术视频| 意大利诱惑| 色戒在线观| 教育在线教育平台直播| 激情豪放女| 粤韵风华| 柏欣彤12点以后跳的广场舞| 美女写真视频高清福利| 最后的巫师猎人 电影| 罗云熙的新剧《尸语者》哪里能看 |