Java 理解泛型的基本含义
生活随笔
收集整理的這篇文章主要介紹了
Java 理解泛型的基本含义
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Java 泛型
Java 泛型(generics)是 JDK 5 中引入的一個新特性, 泛型提供了編譯時類型安全檢測機制,該機制允許程序員在編譯時檢測到非法的類型。
泛型的本質是參數化類型,也就是說所操作的數據類型被指定為一個參數。
?
泛型方法
你可以寫一個泛型方法,該方法在調用時可以接收不同類型的參數。根據傳遞給泛型方法的參數類型,編譯器適當地處理每一個方法調用。
下面是定義泛型方法的規則:
- 所有泛型方法聲明都有一個類型參數聲明部分(由尖括號分隔),該類型參數聲明部分在方法返回類型之前(在下面例子中的<E>)。
- 每一個類型參數聲明部分包含一個或多個類型參數,參數間用逗號隔開。一個泛型參數,也被稱為一個類型變量,是用于指定一個泛型類型名稱的標識符。
- 類型參數能被用來聲明返回值類型,并且能作為泛型方法得到的實際參數類型的占位符。
- 泛型方法體的聲明和其他方法一樣。注意類型參數只能代表引用型類型,不能是原始類型(像int,double,char的等)。
實例:
public class ElementDemo {public static void main(String[] args) {//<Integer>運行時類型//使用泛型后,如果實例化是定義的類型與對象傳入的類型不一致,就會在編譯時期報錯。Test<Integer> t1 = new Test<>();t1.add(666); Test<String> t2 = new Test<>();t2.add("cjj");} }/*** "E" 在這里并沒有實際意義,你也可以用別的字母代替* 它的作用就是在實例化Test類的時候,傳入什么類型它就調用什么類型*/ class Test<E>{public void add(E e) {System.out.println(e);} }
注意:
泛型的命名只要符合標識符的命名規則即可
習慣上泛型一般只使用一個大寫字母進行命名
??? <T> type
?? ?<E> element 元素類型
?? ?<K> key
?? ?<V> value
?? ?<R> result/return
泛型向下兼容
<? extends 類/接口>
import java.util.ArrayList; import java.util.List;public class ElementDemo {public static void main(String[] args) {//實例化一個Integer類型的數組列表對象,里面存儲的數據都是int型數據List<Integer> in = new ArrayList<>();in.add(1);in.add(2);in.add(3);in.add(4);in.add(5);in.add(6);//實例化一個Double類型的數組列表對象,里面存儲的數據都是Double類型的List<Double> dos = new ArrayList<>();dos.add(3.6);dos.add(4.2);dos.add(6.8);dos.add(7.7);dos.add(0.2);//調用方法 print(in);print(dos);}// 寫一個新的方法來遍歷元素類型是數字的列表// 元素類型是Number或者是其子類// ? extends 類/接口 表示傳入這個類/接口或者是其子類/子接口對象// 所能傳入的元素的最大類型限定為Number// 規定了泛型的上限public static void print(List<? extends Number> list) {//在方法體里面不能再往對象里添加元素,null除外list.add(null);//打印對象里面的元素 System.out.println(list);} }
向上造型規定了泛型的上限,上限的子類都可以向泛型方法傳入對象。
泛型向下兼容
<? extends 類/接口>
import java.util.ArrayList; import java.util.List;public class ElementDemo1 {public static void main(String[] args) {List<String> str = new ArrayList<>();str.add(0, "cjj");print(str);}// 泛型的下限// 傳入元素類型是String及其父類的列表// ? super 類/接口 表示傳入這個類/接口及其父類/父接口的對象// 表示傳入的最小類型是String public static void print(List<? super String> list) {//方法體里面可以添加元素list.add("add");for(Object o : list){System.out.println(o);}} }
向上造型規定了泛型的下限,下限的fu類都可以向泛型方法傳入對象。
?
轉載于:https://www.cnblogs.com/chuijingjing/p/9509367.html
總結
以上是生活随笔為你收集整理的Java 理解泛型的基本含义的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一片白雪茫茫是什么歌啊
- 下一篇: json问题小结