国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - 詳解Java泛型之入門泛型必懂的知識點

詳解Java泛型之入門泛型必懂的知識點

2021-06-17 23:54測試開發Kevin Java教程

今天我來講解第一個知識點:Java入門泛型必懂的知識點。先幫大家掃清泛型基礎概念的相關知識點,也歡迎大家持續關注我的后續文章。

我相信,絕大多數初始Java泛型的同學都會感到這個知識點理解起來有些困難,在這里我會對java泛型相關知識點做一個詳細的介紹,包括:入門泛型必懂的知識點、通配符、泛型擦除以及泛型應用四個內容。今天我來講解第一個知識點:入門泛型必懂的知識點。先幫大家掃清泛型基礎概念的相關知識點,也歡迎大家持續關注我的后續文章。

詳解Java泛型之入門泛型必懂的知識點

泛型定義

泛型的英文是 generics,generic 的意思是通用,而翻譯成中文,泛應該意為廣泛,型是類型。所以泛型就是能廣泛適用的類型。但泛型還有一種較為準確的說法就是為了參數化類型,或者說可以將類型當作參數傳遞給一個類或者是方法。我們通過兩個實例對比來了解使用泛型和好處。

1.不使用泛型的實例
  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.   } 
2.使用泛型的實例
  1. public class ValueDemoT<T> { 
  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<Integer> demo = new ValueDemoT<Integer>(); 
  12.       demo.setValue(888); 
  13.       Integer value = demo.getValue(); 
  14.       ValueDemoT<String> demo1 = new ValueDemoT<String>(); 
  15.       demo1.setValue("hello"); 
  16.       String value1 = demo1 .getValue(); 
  17.       System.out.println(value); 
  18.       System.out.println(value1);  
  19.   } 

通過上面的例子我們可以發現使用泛型的好處主要有三點:

1.相對于Object 代替一切類型這種方式,泛型不再需要對取出來的結果進行強制轉換了!泛型使得數據的類型可以像參數一樣由外部傳遞進來,實現類型參數化。

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

詳解Java泛型之入門泛型必懂的知識點

這是一種類型安全檢測機制,一定程度上提高了軟件的安全性防止出現低級的失誤。

3.泛型提高了程序代碼的可讀性,不必要等到運行的時候才去強制轉換,在定義或者實例化階段,因為 ValueDemoT 這個類型顯化的效果,程序員能夠一目了然猜測出代碼要操作的數據類型。

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

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

  • 泛型類。
  • 泛型方法。
  • 泛型接口。
泛型類
  1. public class Demo<T> { 
  2.         T field1; 

實例化方法如下:

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

泛型方法

泛型方法必須以進行聲明,其中包括有參方法和無參方法,具體代碼如下

  1. public class Demo { 
  2.  //無返回值的方法 
  3.   public <T> void testMethod1(T t){ 
  4.           //code 
  5.  //有返回值的方法 
  6.  public  <T> T testMethod2(T t){ 
  7. return null
泛型接口

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

  1. public interface DemoT<T> { 
  2.     public T test(); 
泛型上下邊界

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

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

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

使用的代碼如下:

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

定義一個泛型方法

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

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

泛型的注意點

1.泛型方法中的泛型參數與類的泛型參數沒有關聯,代碼如下:

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

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

2.出于規范的目的,泛型中的T 只是一種習慣性寫法,我們可以把替換為其他標識,例如。常見的其他約定寫法如下:

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

3.泛型可以有多個參數,我們以2個參數為例,代碼如下:

  1. public class ValueDemoT2<A,B> { 
  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<Integer,String> demo = new ValueDemoT2<Integer, String>(); 
  10.       demo.setValue(123456,"hello"); 
  11.       System.out.println(demo.value1); 
  12.       System.out.println(demo.value2);  
  13.   } 

執行代碼輸出:

  • 123456
  • Hello

4.泛型類或者泛型方法中,不接受 8 種基本數據類型。例如下面代碼則無法編譯通過

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

原文鏈接:https://www.toutiao.com/i6970845851816100385/

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 日韩av中文字幕在线播放 | 超碰最新网址 | 日韩超碰 | 日韩有码一区二区三区 | 成人区精品一区二区毛片不卡 | 午夜精品久久久久久久久 | 亚洲欧美高清 | 99精品欧美一区二区三区综合在线 | 亚洲专区 变态 另类 | 日韩av免费在线观看 | 欧美激情精品久久久久久 | 精品国产青草久久久久福利 | 亚洲一区 中文字幕 | 午夜免费视频 | 天天爽天天操 | 成人亚洲欧美 | 在线免费观看黄色 | 午夜精品一区二区三区免费视频 | 中文字幕在线观看 | 老丁头电影在线观看 | 亚洲精品成人免费 | 91网视频| 91新视频| 一级片一级片 | 狠狠干2018 | 国产啊女在线观看 | 午夜视频在线观看网站 | 国产片在线观看免费观看 | 久久网一区二区三区 | 九九人人 | 精品日韩一区 | 国产一二在线 | 日本精品久久 | 日韩视频中文字幕 | 真人一级毛片 | 久久国产精品免费 | 国内精品一级毛片国产99 | 成人免费观看高清视频 | 成人精品 | 日韩午夜电影 | av中文字幕在线观看 |