轉自:
http://www.java265.com/JavaJingYan/202206/16540949953608.html
泛型:通常定義一些以后使用的型別,在代碼撰寫時,型別采用占位符的形式,當然這些占位符,也可以設定其上限,下限等,
下文筆者將用一篇文章,讓你徹底明白java泛型通配符,如下所示
泛型通配符的簡介
泛型通配符:“指可以匹配任意型別”的型別,我們將其稱之為“通配符” 在java中有三種型別的通配符,分別為: 無界,有上限,有下限 那么他們分別表示什么呢?下文筆者將一一道來,如下所示:
泛型無界通配符
無邊界通配符(Unbounded Wildcards): 讓泛型可接收任意未知型別的資料 采用 ? 形式定義 如: List<?>
泛型有上界通配符
泛型上界通配符(Upper bounded Wildcards):
讓泛型可接收指定類及其子類的資料
采用 ? extends E 形式定義
如: List<? extends E>
可接收型別為E,或者E的子類
泛型有下界通配符
泛型下界通配符(Lower bounded Wildcards):
讓泛型可接收指定類及其父類類的資料
采用 ? super E 形式定義
如: List<? super E>
可接收E類或者它的父類
Java泛型通配符的示例分享
例:
定義一個方法可以列印任意型別集合的資料
public class GernericTest {
public static void main(String[] args) throws Exception{
List<Integer> list1 =new ArrayList<Integer>();
List<String> list2 =new ArrayList<String>();
printCollection(list1);
printCollection(list2);
}
public static void printCollection(Collection<Object> collection){
for(Object obj:collection){
System.out.println(obj);
}
}
}
以上代碼會報錯: 陳述句 printCollection(list1); 報錯: The method printCollection(Collection<Object>) in the type GernericTest is not applicable for the arguments (List<Integer>) 因為泛型不能使用繼承屬性,必須使用?通配符
正確的寫法:
public class GernericTest {
public static void main(String[] args) throws Exception{
List<Integer> list1 =new ArrayList<Integer>();
List<String> list2 =new ArrayList<String>();
printCollection(list1);
printCollection(list2);
}
//定義泛型無界通配符
public static void printCollection(Collection<?> collection){
for(Object obj:collection){
System.out.println(obj);
}
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/492412.html
標籤:Java
上一篇:富文本中提取文本的方法分享
