分類方式 按參數分: 有參構造(預設構造) & 無參構造 按類型分: 普通構造 & 拷貝構造 調用方式 括弧法 顯示法 隱式轉換法 PS:下方所有文本均以此代碼為基礎 1 class Person { 2 public: 3 //無參構造函數 4 Person() { 5 std::cout << ...
轉自:
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); } } }