偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

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

開發(fā) 后端
今天我來講解第一個知識點:入門泛型必懂的知識點。先幫大家掃清泛型基礎(chǔ)概念的相關(guān)知識點,也歡迎大家持續(xù)關(guān)注我的后續(xù)文章。

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

[[406054]]

泛型定義

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

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.   } 

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

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

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

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

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

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

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

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

泛型類

  1. public class Demo<T> { 
  2.         T field1; 

實例化方法如下:

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

泛型方法

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

  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(); 

泛型上下邊界

在使用泛型的時候,我們還可以為傳入的泛型類型實參進(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. 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) 中的參數(shù)只能傳入 Car類或者其子類的實例,而Car的父類Vehicle的實例則不能傳入!super的使用跟extends類似,這里就不再詳細(xì)講解了

泛型的注意點

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

  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.出于規(guī)范的目的,泛型中的T 只是一種習(xí)慣性寫法,我們可以把替換為其他標(biāo)識,例如。常見的其他約定寫法如下:

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

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

  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.   } 

執(zhí)行代碼輸出:

  • 123456
  • Hello

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

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

 

責(zé)任編輯:姜華 來源: 今日頭條
相關(guān)推薦

2021-06-18 08:25:42

Java泛型通配符

2021-07-01 06:47:30

Java泛型泛型擦除

2021-07-09 06:11:37

Java泛型Object類型

2022-06-19 22:54:08

TypeScript泛型工具

2017-11-14 14:41:11

Java泛型IO

2010-01-06 10:43:49

.NET Framew

2011-03-21 16:26:28

java泛型

2024-10-28 00:40:49

Go語法版本

2011-04-13 09:16:55

泛型

2021-03-01 07:34:42

Java泛型ArrayList

2021-09-29 18:17:30

Go泛型語言

2024-10-22 16:59:07

2020-02-21 08:18:58

JavaScala編程語言

2009-09-25 10:03:51

Java泛型

2009-07-30 14:00:21

ASP.NET 2.0

2017-03-06 16:51:52

Java泛型實現(xiàn)

2021-12-30 19:34:15

Java泛型JDK

2011-06-03 08:49:54

Java

2009-08-24 18:22:05

C# 泛型編程

2011-08-08 14:14:03

架構(gòu)
點贊
收藏

51CTO技術(shù)棧公眾號