springboot專案中實現訪問druid內建監控頁面
阿新 • • 發佈:2021-12-08
泛型
Object類是最上層的父類,為使程式更通用,設計程式時通常將傳入的的值與返回值都以Object型別為主。當使用這些例項時,必須轉換為它原來的型別,否則會異常。為預防異常問題,提供了泛型機制
語法:
類名<T>
T是泛型的名稱,代表一種型別,需手動指定型別,若沒有指定,則採用Object型別
public class Book<T> { private T bookInfo; public Book(T bookInfo){ this.bookInfo=bookInfo; } public T getBookInfo(){ return bookInfo; } public static void main(String[] args) { Book<String> bookName = new Book<String>("高等數學"); Book<String> bookAuthor = new Book<>("同濟大學");//後面的<>裡面不寫型別也可以 Book<Double> bookPrice = new Book<Double>(25.9); Book<Boolean> hasOther = new Book<Boolean>(false); System.out.println(bookName.getBookInfo()); System.out.println(bookAuthor.getBookInfo()); System.out.println(bookPrice.getBookInfo()); System.out.println(hasOther.getBookInfo()); } } /* 高等數學 同濟大學 25.9 false */
常規用法
定義時宣告多個型別
class Demo01<T1,T2>{}
T1和T2為可定義的型別
宣告陣列型別
public class Array <T>{ private T[] arr; //定義泛型陣列 public T[] getArr(){ return arr; } public void setArr(T[] arr){ this.arr=arr; } public static void main(String[] args) { Array<String> demo = new Array<>(); String value[]={"你好","十二月","你好呀"}; demo.setArr(value); String arr[]= demo.getArr(); for (int i = 0; i < arr.length; i++) { System.out.println(arr[i]); } } }
常用的被泛型化的集合類
集合類 | 泛型定義 |
---|---|
ArrayList | ArrayList |
HashMap | HashMap<K,V> |
HashSet | HashSet |
高階用法
限制泛型可用型別
class 類名稱<T extends anyClass>
anyClass指某類介面或類
使用泛型限制後,泛型類的型別必須實現或繼承anyClass這個介面或類。在進行泛型限制時必須使用extends關鍵字
使用型別萬用字元
主要作用是在建立一個泛型類物件時限制這個泛型類的型別實現或繼承某個介面或類的子類
要宣告一個物件可以使用"?"萬用字元來表示,同時使用extends來對泛型進行限制
泛型類名稱<? extends List> a=null;
表示型別未知,使用時,可單獨例項化
```java
A a=null;
a =new A泛型型別限制除了可以向下限制,也可以向上限制,在定義時加上super即可
A<? super List> a=null;
定義後,a只接受List介面或上層父類型別
繼承泛型類與實現泛型介面
定義為泛型類的介面也可以被繼承和實現
class A<T1>{}
class B<T1,T2,T3> extends A<T1>{}
實現介面
interface A<T1>{}
class B<T1,T2,T3> implements A<T1>{}
泛型總結
- 泛型的型別引數只能是類型別,而不能是普通型別,例如A《int》(這裡的書名號是尖括號)就是錯誤的
- 型別個數可以是多個
- 可用extends限制泛型的型別
- 可用萬用字元限制泛型的型別