泛型是程序設計語言的一種特性。容許程序員在強類型程序設計語言中編寫代碼時定義一些可變部分,那些部分在使用前必須做出指明。各類程序設計語言和其編譯器、運行環境對泛型的支持均不同。將類型參數化以達到代碼複用提升軟件開發工做效率的一種數據類型。泛型類是引用類型,是堆對象,主要是引入了類型參數這個概念。java
java中的泛型程序員
泛型:泛型是jdk1.5出現的新特性。
泛型是針對引用類型來使用的。數組
泛型的好處:
1. 將運行時出現的問題提早至了編譯時。
2. 避免了無謂強制類型轉換。app
自定義泛型: 自定義泛型就是一個數據類型的佔位符或者理解爲一個數據類型的變量。
泛型方法ide
定義格式:
修飾符 <聲明自定義的泛型>返回值類型 函數名(自定義的泛型 變量名..)函數
代碼示例以下:ui
1 public class TestType { 2 public static void main(String[] args) { 3 String str = "張三"; 4 Integer num = 123; 5 System.out.println("返回字符串:"+getData(str)); 6 System.out.println("返回數字類型:"+getData(num)); 7 8 } 9 //定義一個方法能夠接收任意類型的參數,並且返回值類型必須 要與實參的類型一致。 10 public static <E>E getData(E element) { 11 return element; 12 } 13 14 }
泛型方法要注意的事項:
1. 泛型方法中的自定義泛型的具體數據類型是在調用該函數的時候傳入實參時肯定的。
2. 自定義泛型所用的標識符只要符合標識符的命名規則便可。可是咱們通常都習慣使用一個大寫字母T(Type)或者E(Element)來表示。
泛型類
泛型類的定義格式
class 類名<聲明自定義的泛型>{
}spa
代碼示例以下:設計
1 class MyArrays<T>{ 2 //翻轉數組中的元素 3 public void reverse(T[] array) { 4 for (int startIndex = 0,endIndex = array.length-1; startIndex<endIndex; startIndex++,endIndex--) { 5 T temp = array[startIndex]; 6 array[startIndex] = array[endIndex]; 7 array[endIndex] = temp; 8 } 9 } 10 11 //轉化爲字符串 12 public static <T>String toString(T[] array) { 13 StringBuilder stringBuilder = new StringBuilder(); 14 for (int i = 0; i < array.length; i++) { 15 if (i==0) { 16 stringBuilder.append("["+array[i]+",") ; 17 }else if (i==array.length-1) { 18 stringBuilder.append(array[i]+"]") ; 19 }else{ 20 stringBuilder.append(array[i]+",") ; 21 } 22 } 23 return stringBuilder.toString(); 24 } 25 } 26 27 public class TestType { 28 public static void main(String[] args) { 29 //泛型類 30 String[] strArray = {"張三","李四","王五"}; 31 MyArrays<String> tool = new MyArrays<String>(); 32 tool.reverse(strArray); 33 System.out.println(MyArrays.toString(strArray)); 34 35 Integer[] numArray = {1,2,3,4}; 36 String numStr = MyArrays.toString(numArray); 37 System.out.println(numStr); 38 39 }
泛型類要注意的事項:code
1. 泛型類上的自定義泛型是在使用該類建立對象的時候指定具體的數據類型的。
2. 若是一個類已經自定義了泛型,使用該類建立對象的時候若是沒有指定泛型的具體數據類型,那麼默認爲Object類型。
3. 靜態的函數不能使用類上自定義的泛型,若是靜態函數須要使用,必需要在函數上自定義泛型。
泛型接口
泛型接口的定義格式:
interface 接口名<聲明自定義的泛型>{
}
代碼示例:
1 interface Array<T>{ 2 public void reverse(T[] array); 3 } 4 class MyArrays implements Array<String>{ 5 //翻轉數組中的元素 6 public void reverse(String[] array) { 7 for (int startIndex = 0,endIndex = array.length-1; startIndex<endIndex; startIndex++,endIndex--) { 8 String temp = array[startIndex]; 9 array[startIndex] = array[endIndex]; 10 array[endIndex] = temp; 11 } 12 } 13 14 //轉化爲字符串 15 public static <T>String toString(T[] array) { 16 StringBuilder stringBuilder = new StringBuilder(); 17 for (int i = 0; i < array.length; i++) { 18 if (i==0) { 19 stringBuilder.append("["+array[i]+",") ; 20 }else if (i==array.length-1) { 21 stringBuilder.append(array[i]+"]") ; 22 }else{ 23 stringBuilder.append(array[i]+",") ; 24 } 25 } 26 return stringBuilder.toString(); 27 } 28 } 29 30 public class TestType { 31 public static void main(String[] args) { 32 //泛型類 33 String[] strArray = {"張三","李四","王五"}; 34 MyArrays tool = new MyArrays(); 35 tool.reverse(strArray); 36 System.out.println(MyArrays.toString(strArray)); 37 38 }
泛型接口要注意事項:
1. 泛型接口上的自定義泛型是在實現該接口的時候指定具體數據類型的。
2. 若是實現接口的時候沒有指定接口上的自定義泛型的具體數據類型,那麼默認爲Object數據類型。
3. 若是須要在建立接口實現類對象的時候才指定接口上自定義泛型,那麼須要如下格式:
class<T> 類名 implements 接口<T>
代碼示例以下:
1 interface Array<T>{ 2 public void reverse(T[] array); 3 } 4 class MyArrays<T> implements Array<T>{ 5 //翻轉數組中的元素 6 public void reverse(T[] array) { 7 for (int startIndex = 0,endIndex = array.length-1; startIndex<endIndex; startIndex++,endIndex--) { 8 T temp = array[startIndex]; 9 array[startIndex] = array[endIndex]; 10 array[endIndex] = temp; 11 } 12 } 13 14 //轉化爲字符串 15 public static <T>String toString(T[] array) { 16 StringBuilder stringBuilder = new StringBuilder(); 17 for (int i = 0; i < array.length; i++) { 18 if (i==0) { 19 stringBuilder.append("["+array[i]+",") ; 20 }else if (i==array.length-1) { 21 stringBuilder.append(array[i]+"]") ; 22 }else{ 23 stringBuilder.append(array[i]+",") ; 24 } 25 } 26 return stringBuilder.toString(); 27 } 28 } 29 30 public class TestType { 31 public static void main(String[] args) { 32 //泛型類 33 String[] strArray = {"張三","李四","王五"}; 34 MyArrays<String> tool = new MyArrays<String>(); 35 tool.reverse(strArray); 36 System.out.println(MyArrays.toString(strArray)); 37 }
泛型上下限 ?爲通配符 ? super Integer 容許是Integer數據類型或者是Integer父類類型 泛型的下限 ? extedns Number 容許是Number數據類型或者是Number子類的數據類型 泛型的上限。