日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

说透泛型类和泛型方法以及Class<T>和Class<?>的差异

發布時間:2023/11/27 生活经验 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 说透泛型类和泛型方法以及Class<T>和Class<?>的差异 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

泛型類和泛型方法看起來似乎可以實現類似的功能,但是很多人并未真正掌握泛型方法,網上很多文章說了很多還是似是而非,特別是初學者還是搞不明白。

一.關于泛型方法

1.泛型方法可以獨立于泛型類

2.泛型方法等效于泛型類里泛型參數方法,實際上也還是泛型方法。

?

我覺得造成這個混亂是Java學界翻譯的一點問題,或者說是疏忽了這一點。

應該分為:非泛型類中的泛型方法泛型類中的泛型方法

?

代碼一 泛型類Generic:

泛型類有一個帶泛型參數的方法listAdd,有2個入參一個泛型數組,一個泛型List。

功能很簡單就是把數組元素添加到List里,返回泛型List。

實際上你用非泛型類的泛型方法的寫法加一對菱形表達式<>也沒錯,但是編譯器會給你提示:參數類型T隱藏類型參數T。

下面是非泛型類中的泛型方法listAdd1和普通方法listAdd2:

?

通過對比你就明白了,非泛型類中的泛型方法比泛型類中的泛型方法多了一個菱形表達式<>而已,僅此而已。?

public class Generic<T>{//泛型類中的泛型參數方法public  List<T>  listAdd(T[] arr,List<T> list) {for (T t : arr) {list.add(t);}return list;}
}
    //非泛型類中的泛型方法public static <T> List<T> listAdd1(T[] arr, List<T> list) {for (T t : arr) {list.add(t);}return list;}//非泛型類中的普通方法public static  List<String> listAdd2(String [] arr, List<String> list) {for (String t : arr) {list.add(t);}return list;}

二.關于Class<T>和Class<?>

public class Box<T> {private T t;public Box(){}public Box(T data){this.t=data;}public T getT() {return t;}public void setT(T t) {this.t = t;}
}
    public static void main(String[] args) {SpringApplication.run(TestApplication.class, args);Box<String> s=new Box<String>("abc");Box<Integer> i=new Box<Integer>(123);System.out.println("s class:" + s.getClass());System.out.println("i class:" + i.getClass());System.out.println(s.getClass() == i.getClass());getData(s);getData(i);}public static  <T> void getData(Box<T> data){System.out.println("data :" + data.getT());}
public static void main(String[] args) {SpringApplication.run(TestApplication.class, args);Box<String> s=new Box<String>("abc");Box<Integer> i=new Box<Integer>(123);System.out.println("s class:" + s.getClass());System.out.println("i class:" + i.getClass());System.out.println(s.getClass() == i.getClass());getData(s);getData(i);}public static  void getData(Box<?> data){System.out.println("data :" + data.getT());}

可以看到<?>實際上和? 泛型方法是等效的,只要返回值前面加上 <T>就可以了。?

?

總結

以上是生活随笔為你收集整理的说透泛型类和泛型方法以及Class<T>和Class<?>的差异的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。