JavaSE基礎知識學習-----泛型

泛型

Java泛型是jdk1.5的一個新特性,jdk的性特性還包括:泛型,枚舉,裝箱和拆箱,可變參數等。這里先主要學習泛型。這些特性,現在都在廣泛的使用。因為現在使用IDE編寫代碼,都是標準的代碼提示,所以泛型也就變得理所應當,但還是應該學習記錄一下。

泛型的聲明

interface List和class 名稱<K,V>,其中T,K,V代表的是類型。例如 List list = new ArrayList(); Inerator iterator = customers.iterator();

說明:T只能是類,不能是基本數據類型

為什么要有這個新特性

public static void main(String[] args) {List list = new ArrayList();list.add(12);list.add(23);list.add(45);list.add(65);list.add(new String("AA"));for(int i = 0 ; i < list.size(); i++){int age = (Integer)list.get(i);System.out.println(age);}
}
復制代碼

上述代碼就是用一個集合存儲年齡,如果不使用泛型的話就是任何元素就都可添加到集合中,導致類型不安全,其次在遍歷的時候需要強轉,如果不小心在Integer類型的集合中放入一個String類型的,那么在遍歷就會出現一個類型轉換異常。 1.為了解決元素存儲的安全性問題 2.解決獲取數據元素時,需要類型強轉的問題,例如 String類型的對象→集合Object類型對象→讀取為Object對象→強轉為String對象,集合使用Object類型會導致類型不安全,簡單說就是任何元素都可以添加進去。

使用泛型

集合中使用泛型可以達到類型安全,讀取出來的對象不需要強轉,使得程序簡單快捷。 同上的代碼,如果集合的聲明為:

List<String> list = new ArrayList<String>();
復制代碼

使用泛型聲明集合,就只能向集合添加相同類型的數據,在遍歷的數據類型也是聲明泛型的類型,不需要再強轉。下面是使用泛型的一個例子。

public static void main(String[] args) {Map<String, Integer> map = new HashMap<String, Integer>();map.put("AA", 98);map.put("BB", 86);map.put("CC", 75);map.put("DD", 62);Set<Map.Entry<String, Integer>> set = map.entrySet();for(Map.Entry<String, Integer> o: set){System.out.println(o.getKey()+"===="+o.getValue());}
}
復制代碼

List源碼解釋泛型

1.為什么List接口可以使用泛型,源碼如下:

public interface List<E> extends Collection<E> {
復制代碼

其中代表的就是泛型,再看里面的方法,

 boolean add(E e);E get(int index);
復制代碼

其中的方法都是傳入泛型的對象,得到的也是泛型的對象。

自定義泛型類,泛型方法

當實例化泛型類的對象時,明確指明泛型的類型,自定義泛型類的類中所有使用泛型的位置,都變成實例化中指定的泛型的類型。例如如下自定義泛型類:

public class TestGeneric<T> {private String name;private String sex;private T t;List<T> list = new ArrayList<>();public void add(){list.add(t);}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}public T getT() {return t;}public void setT(T t) {this.t = t;}public static void main(String[] args) {TestGeneric<String> generic = new TestGeneric<String>();generic.setT("AA");generic.add();List<String> list = generic.list;System.out.println(list);}
}
復制代碼

泛型的更多使用是為了代碼的通用性。在使用jdbc編寫查詢數據的DAO就可以使用泛型來編寫通用的父類DAO。讓子類繼承來決定類型。 對于集合類的泛型需要注意以下幾點:

1.對象實例化不指定泛型,默認為Object
2.泛型不同的引用不能相互賦值
3.加入集合中的對象類型必須和指定的泛型類型保持一致
4.靜態方法中不能使用泛型
5.如果泛型類是一個接口或抽象類,則不可以創建泛型類的對象

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/539336.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/539336.shtml
英文地址,請注明出處:http://en.pswp.cn/news/539336.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

centos7 校正linux系統時間_Linux系統:Centos7下搭建ClickHouse列式存儲數據庫

一、ClickHouse簡介1、基礎簡介Yandex開源的數據分析的數據庫&#xff0c;名字叫做ClickHouse&#xff0c;適合流式或批次入庫的時序數據。ClickHouse不應該被用作通用數據庫&#xff0c;而是作為超高性能的海量數據快速查詢的分布式實時處理平臺&#xff0c;在數據匯總查詢方面…

html調用js頁面顯示不出來了,JS代碼文件調用顯示亂碼,直接寫在html頁面的里可以調用,但是單獨放在js文件里不能調用...

最近遇到了一個很奇怪的問題&#xff0c;就是在HTML網頁代碼里直接寫JS代碼可以正常運行的代碼&#xff0c;使用JS文件調用就不行。var cities [ {"name" : "北京"}, {"name" : "上海"}, {"name" : "廣州"} ];$(…

水系圖一般在哪里找得到_城市供水系統防護體系的探索與思考

城市是一個國家或地區的政治、經濟和文化中心&#xff0c; 在戰爭中常常被選為重點打擊目標。1988年&#xff0c;時任美國空軍司令部副參謀長助理的約翰A. 沃登上校提出“五環”目標打擊理論&#xff0c;將 對敵打擊目標分為五個層&#xff0c;其中就將基礎設施列為第三層打擊目…

Hadoop webHDFS設置和使用說明

原文&#xff1a;http://blog.csdn.net/iloveyin/article/details/28264027 ---------------------------------------------------------------------------------------- 1.配置 namenode的hdfs-site.xml是必須將dfs.webhdfs.enabled屬性設置為true&#xff0c;否則就不能使…

CES 2017前瞻之AI:無人機依舊小巧,機器人主打家庭服務

再過2天&#xff0c;CES 2017就要開始了&#xff0c;根據這些已知曉的部分展商&#xff0c;我們也許能夠看到未來的一些趨勢。 還有2天&#xff0c;備受矚目的CES 2017&#xff08;2017年國際消費類電子產品展覽會&#xff09;就要拉開帷幕了。 每一年&#xff0c;CES上都會出…

ionic html5 上傳圖片,ionic4+angular7+cordova上傳圖片功能的實例代碼

前言ionic是一個垮平臺開發框架&#xff0c;可通過web技術開發出多平臺的應用。但只建議開發簡單應用。復雜的應用需要用到許多cordova插件&#xff0c;而cordova插件的更新或者移動平臺的更新很可能導致插件的不可用&#xff0c;維護升級成本較高。安裝插件安裝插件Image Pick…

HDFS體系結構

Namenode 是整個文件系統的管理節點。它維護著整個文件系統的文件目錄樹&#xff0c;文件/目錄的元信息metadate和每個文件對應的數據塊列表。 功能&#xff1a;接收用戶的操作請求。 metadate信息包括&#xff1a; 1、文件的owership和permission。 2、文件包含哪些block塊…

為什么要將html頁面和樣式表分離,0031 如何使用css文件對網頁內容和樣式進行分離...

原標題&#xff1a;0031 如何使用css文件對網頁內容和樣式進行分離上節課&#xff0c;學習了針對文字可以設置很多種樣式。這節課&#xff0c;學習如何將內容和樣式進行分離。上節課的課后練習1.將斜體字體效果去除2.將工作經歷和工作經驗(部分)這2行文字也做成簡介這行文字的效…

redis 關系數據庫怎么轉換 和_redis數據庫設計(轉)

閱讀目錄redis是什么redis就是一個存儲key-value鍵值對的倉庫&#xff0c;如何使用redis在于如何理解你需要設計的系統的E-R的模型&#xff0c;然后合理的規劃redis的數據庫結構場景我舉一個簡單的消息系統的例子&#xff0c;業務需求&#xff1a;服務器端發送消息給用戶E-R模型…

Hadoop Archives

介紹 時間&#xff1a; Hadoop Archives (HAR files)是在0.18.0版本中引入的。 作用&#xff1a; 將hdfs里的小文件打包成一個文件&#xff0c;相當于windows的zip&#xff0c;rar。Linux的 tar等壓縮文件。把多個文件打包一個文件。 意義&#xff1a; 它的出現就是為了緩…

js 判斷日期時間差

2019獨角獸企業重金招聘Python工程師標準>>> alert(GetDateDiff("2018-02-27 19:20:22","2018-02-27 09:20:22","hour"));function GetDateDiff(startTime, endTime, diffType) {//將xxxx-xx-xx的時間格式&#xff0c;轉換為 xxxx/xx…

python 圖形_Python圖形數據

CSGraph代表 壓縮稀疏圖 &#xff0c;它著重于基于稀疏矩陣表示的快速圖算法。 圖表表示 首先&#xff0c;讓我們了解一個稀疏圖是什么以及它在圖表示中的作用。 什么是稀疏圖&#xff1f; 圖形只是節點的集合&#xff0c;它們之間有鏈接。圖表幾乎可以代表任何事物 - 社交網絡…

本地運行hadoop-Failed to locate the winutils binary in the hadoop binary path

轉自&#xff1a;http://www.cnblogs.com/zq-inlook/p/4386216.html 之前在mac上調試hadoop程序&#xff08;mac之前配置過hadoop環境&#xff09;一直都是正常的。因為工作需要&#xff0c;需要在windows上先調試該程序&#xff0c;然后再轉到linux下。程序運行的過程中&#…

dubbo 支持服務降級嗎_dubbo面試題!會這些,說明你真正看懂了dubbo源碼

整理了一些dubbo可能會被面試的面試題&#xff0c;感覺非常不錯。如果你基本能回答說明你看懂了dubbo源碼&#xff0c;對dubbo了解的足夠全面。你可以嘗試看能不能回答下。我們一起看下有哪些問題吧&#xff1f;dubbo中"讀接口"和"寫接口"有什么區別?談談…

不滿足于汽車制造,豐田展示仿鋼鐵俠機器支撐腿架

而汽車制造商開發機器人也不是豐田一家的專利&#xff0c;此前現代也推出過類似的支撐機器人腿架 大多數人對于豐田的印象都停留在汽車制造上&#xff0c;不過他們卻不僅僅滿足于汽車事業的發展&#xff0c;最近&#xff0c;豐田正在研發一款機器人支撐腿架&#xff0c;來幫助…

js html異步加載的屬性,異步加載JS的五種方式

方案一&#xff1a;點評&#xff1a;HTML5中新增的屬性&#xff0c;Chrome、FF、IE9&IE9均支持(IE6~8不支持)。此外&#xff0c;這種方法不能保證腳本按順序執行。方案二&#xff1a;點評&#xff1a;兼容所有瀏覽器。此外&#xff0c;這種方法可以確保所有設置defer屬性的…

python中各操作符的優先級_Python3練習題系列(06)——各種符號總結

Python3中的各種符號總結 1關鍵字 import keyword print(keyword.kwlist, end\t) [False, None, True, and, as, assert, break, class, continue, def, del, elif, else, except, finally, for, from, global, if, import, in, is, lambda, nonlocal, not, or, pass, raise, r…

hdfs java讀寫hdfs demo

windows環境配置&#xff1a; 1.下載winutils的windows版本 GitHub上&#xff0c;有人提供了winutils的windows的版本&#xff0c; 項目地址是&#xff1a;https://github.com/srccodes/hadoop-common-2.2.0-bin,直接下載此項目的zip包&#xff0c;下載后是文件名是hadoop-comm…

cesium 經緯度繪制點_NCL繪制2016年1號臺風(Nepartak)

begin ncol 6 ;臺風參數 nrow 31 ;時次總數 nbin 6 ;已知該該氣旋共經歷了6個等級的演變 ;讀入臺風資料 data asciiread("NEPARTAK.txt",(/nrow,ncol/),"integer") ;/31,6/ 31行6列&#xff0c;integer整數類型 ;;數據讀取函數總結&…

VR究竟多奇幻?eSmart邀你共赴一場VR奇幻之旅!

今年夏天&#xff0c;快來參加首屆eSmart展會&#xff0c;來一場VR游戲的奇妙之旅&#xff0c;見識最好玩、最有趣的VR游戲&#xff01; 正如十幾年前互聯網的興起開創了全新時代一樣&#xff0c;VR產業在近兩年也勢不可擋。隨著一重行業巨頭的進入&#xff0c;2016年&#xf…