日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
詳解Java泛型之入門泛型必懂的知識(shí)點(diǎn)

 我相信,絕大多數(shù)初始Java泛型的同學(xué)都會(huì)感到這個(gè)知識(shí)點(diǎn)理解起來(lái)有些困難,在這里我會(huì)對(duì)java泛型相關(guān)知識(shí)點(diǎn)做一個(gè)詳細(xì)的介紹,包括:入門泛型必懂的知識(shí)點(diǎn)、通配符、泛型擦除以及泛型應(yīng)用四個(gè)內(nèi)容。今天我來(lái)講解第一個(gè)知識(shí)點(diǎn):入門泛型必懂的知識(shí)點(diǎn)。先幫大家掃清泛型基礎(chǔ)概念的相關(guān)知識(shí)點(diǎn),也歡迎大家持續(xù)關(guān)注我的后續(xù)文章。

泛型定義

泛型的英文是 generics,generic 的意思是通用,而翻譯成中文,泛應(yīng)該意為廣泛,型是類型。所以泛型就是能廣泛適用的類型。但泛型還有一種較為準(zhǔn)確的說(shuō)法就是為了參數(shù)化類型,或者說(shuō)可以將類型當(dāng)作參數(shù)傳遞給一個(gè)類或者是方法。我們通過(guò)兩個(gè)實(shí)例對(duì)比來(lái)了解使用泛型和好處。

1.不使用泛型的實(shí)例

 
 
 
 
  1. public class ValueDemo {
  2.   Object value;
  3.   public Object getValue() {
  4.       return value;
  5.   }
  6.   public void setValue(Object value) {
  7.       this.value = value;
  8.   }
  9.   public static void main(String[] args) {
  10.       // TODO Auto-generated method stub
  11.       ValueDemo demo = new ValueDemo();
  12.       demo.setValue(888);
  13.       int value = (int) demo.getValue();
  14.       demo.setValue("hello");
  15.       String value1 = (String) demo.getValue();
  16.       System.out.println(value);
  17.       System.out.println(value1); 
  18.   }
  19. }

2.使用泛型的實(shí)例

 
 
 
 
  1. public class ValueDemoT {
  2.       T value;
  3.       public T getValue() {
  4.         return value;
  5.       }
  6.       public void setValue(T value) {
  7.         this.value = value;
  8.       }
  9.   public static void main(String[] args) {
  10.       // TODO Auto-generated method stub
  11.       ValueDemoT demo = new ValueDemoT();
  12.       demo.setValue(888);
  13.       Integer value = demo.getValue();
  14.       ValueDemoT demo1 = new ValueDemoT();
  15.       demo1.setValue("hello");
  16.       String value1 = demo1 .getValue();
  17.       System.out.println(value);
  18.       System.out.println(value1); 
  19.   }
  20. }

通過(guò)上面的例子我們可以發(fā)現(xiàn)使用泛型的好處主要有三點(diǎn):

1.相對(duì)于Object 代替一切類型這種方式,泛型不再需要對(duì)取出來(lái)的結(jié)果進(jìn)行強(qiáng)制轉(zhuǎn)換了!泛型使得數(shù)據(jù)的類型可以像參數(shù)一樣由外部傳遞進(jìn)來(lái),實(shí)現(xiàn)類型參數(shù)化。

2.泛型參數(shù)一旦確定好,如果類型不匹配,編譯器就不通過(guò)。如下圖所示:

這是一種類型安全檢測(cè)機(jī)制,一定程度上提高了軟件的安全性防止出現(xiàn)低級(jí)的失誤。

3.泛型提高了程序代碼的可讀性,不必要等到運(yùn)行的時(shí)候才去強(qiáng)制轉(zhuǎn)換,在定義或者實(shí)例化階段,因?yàn)?ValueDemoT 這個(gè)類型顯化的效果,程序員能夠一目了然猜測(cè)出代碼要操作的數(shù)據(jù)類型。

泛型類、泛型方法和泛型接口

泛型按照使用情況可以分為 3 種。

  • 泛型類。
  • 泛型方法。
  • 泛型接口。

泛型類

 
 
 
 
  1. public class Demo {
  2.         T field1;
  3. }

實(shí)例化方法如下:

 
 
 
 
  1. Demo  demo1=new Demo <>();
  2. Demo  demo2 =new Demo<>();

泛型方法

泛型方法必須以進(jìn)行聲明,其中包括有參方法和無(wú)參方法,具體代碼如下

 
 
 
 
  1. public class Demo {
  2.  //無(wú)返回值的方法
  3.   public  void testMethod1(T t){
  4.           //code
  5. }
  6.  //有返回值的方法
  7.  public   T testMethod2(T t){
  8. return null;
  9. }
  10. }

泛型接口

泛型接口與泛型類的定義及使用基本相同,代碼如下:

 
 
 
 
  1. public interface DemoT {
  2.     public T test();
  3. }

泛型上下邊界

在使用泛型的時(shí)候,我們還可以為傳入的泛型類型實(shí)參進(jìn)行上下邊界的限制。

— 泛型的參數(shù)使用extends關(guān)鍵字表示參數(shù)只能接受類class和其子類。這里的class是上限。

— 泛型的參數(shù)使用super關(guān)鍵字表示參數(shù)只能接受類class和其父類。這里的class是下限。

使用的代碼如下:

 
 
 
 
  1. public class Vehicle {
  2.   public void drive() {};
  3.   public void brake() {};
  4. }
  5. public class Car extends Vehicle {
  6.   public void drive() {
  7.       System.out.println("car的drive方法");
  8.   };
  9.   public void brake() {
  10.       System.out.println("car的brake方法");
  11.   };
  12. }
  13. public class Benz extends Car{
  14.   public void drive() {
  15.       System.out.println("benz drive");
  16.   };
  17. }

定義一個(gè)泛型方法

 
 
 
 
  1. public class CarT {
  2.   public static void main(String[] args) {
  3.       getCar(new Benz());
  4.       getCar(new Car());
  5.       getCar(new Vehicle()); //IDE報(bào)錯(cuò)
  6.   }
  7.   public static  void getCar(T car) {
  8.       car.drive();
  9.   }

可以看到方法getCar(T car) 中的參數(shù)只能傳入 Car類或者其子類的實(shí)例,而Car的父類Vehicle的實(shí)例則不能傳入!super的使用跟extends類似,這里就不再詳細(xì)講解了

泛型的注意點(diǎn)

1.泛型方法中的泛型參數(shù)與類的泛型參數(shù)沒(méi)有關(guān)聯(lián),代碼如下:

 
 
 
 
  1. public class Demo1 {
  2.   public  T testMethod1(T t){
  3.         return t;
  4.   }
  5.   public static void main(String[] args) {
  6.       Demo1 demo=new Demo1 ();
  7.       Integer i=demo.testMethod1(new Integer(123));
  8.       System.out.println(i);
  9.   }
  10. }

可以看到Demo1 和testMethod1(T t)可以賦值不同的類型,前者是String而后者是 Integer。

2.出于規(guī)范的目的,泛型中的T 只是一種習(xí)慣性寫法,我們可以把替換為其他標(biāo)識(shí),例如。常見(jiàn)的其他約定寫法如下:

  • T 代表一般的任何類。
  • E 代表 Element 。
  • K 代表 Key 。
  • V 代表 Value,通常與 K 一起配合使用。

3.泛型可以有多個(gè)參數(shù),我們以2個(gè)參數(shù)為例,代碼如下:

 
 
 
 
  1. public class ValueDemoT2 {
  2.       A value1;
  3.       B value2;
  4.       public  void setValue(A p_value1,B p_value2) {
  5.         value1 = p_value1;
  6.         value2 = p_value2;
  7.       }
  8.   public static void main(String[] args) {
  9.       ValueDemoT2 demo = new ValueDemoT2();
  10.       demo.setValue(123456,"hello");
  11.       System.out.println(demo.value1);
  12.       System.out.println(demo.value2); 
  13.   }
  14. }

執(zhí)行代碼輸出:

  • 123456
  • Hello

4.泛型類或者泛型方法中,不接受 8 種基本數(shù)據(jù)類型。例如下面代碼則無(wú)法編譯通過(guò)

 
 
 
 
  1. List li = new ArrayList<>();

網(wǎng)頁(yè)名稱:詳解Java泛型之入門泛型必懂的知識(shí)點(diǎn)
網(wǎng)站網(wǎng)址:http://www.5511xx.com/article/dhcoegp.html