Java中泛型的用法總結(jié)
本文實(shí)例總結(jié)了Java中泛型的用法。分享給大家供大家參考。具體如下:
1 基本使用
public interface List<E> {
void add(E);
Iterator<E> iterator();
}
2 泛型與子類
Child是Parent的子類,List<Child>卻不是List<Parent>的子類。
因此:List<Object> list = new ArrayList<String>()是錯(cuò)誤的。
如果上面是正確的,那么:
List<String> ls = new ArrayList<String>(); //1 List<Object> lo = ls; //2 lo.add(new Object()); // 3 String s = ls.get(0); // 4,將object轉(zhuǎn)換為string將失敗。
3 wildcards
因?yàn)?的原因,下面的實(shí)現(xiàn)用于統(tǒng)配集合的輸出是不行的
void printCollection(Collection<Object> c) {
for (Object o: c) {
// do something
}
}
因此,需要通配符?:
void printCollection(Collection<?> c) {
for (Object o: c) { // 1
// do something
}
} // ok
此處的?表示類型未知,但是任何對(duì)象均是Object,因此上例的1是正確的。但下例卻是錯(cuò)誤的:
void add(Collection<? extends MyClass> c) {
c.add(new MyClass()); // wrong
} // ok
原因也很明確,? extends MyClass說(shuō)明類型是MyClass的子類,但是卻并不知道具體類型
4. 泛型方法
上例可以實(shí)現(xiàn)為:
<T> add(Collection<T> c, T t) {
c.add(t);
}
編譯器在保證語(yǔ)義的前提,會(huì)幫忙做類型的轉(zhuǎn)換工作。
5. 泛型運(yùn)行時(shí)的對(duì)比
List<String> l1 = new ArrayList<String>(); List<Integer> l2 = new ArrayList<Integer>(); System.out.println(l1.getClass() == l2.getClass()); // true
因?yàn)榉盒皖愡\(yùn)行時(shí)時(shí)一樣的。
6 泛型數(shù)組(可能導(dǎo)致類型不安全)
如果可以的話,可能導(dǎo)致類型不安全。如:
Object o = lsa; Object []oa = (Object[])o; List<Integer> li = new ArrayList<Integer>(); li.add(new Integer(3)); oa[1] = li; String s = lsa[1].get(0); // runtime error
希望本文所述對(duì)大家的java程序設(shè)計(jì)有所幫助。
相關(guān)文章
Java實(shí)現(xiàn)讀取超過(guò)內(nèi)存大小的文件
在一些場(chǎng)景下,我們需要處理的文件可能比我們機(jī)器所擁有的內(nèi)存要大,如果遇到這種情況該如何解決呢,本文就來(lái)和大家講講如何使用Java實(shí)現(xiàn)讀取超過(guò)內(nèi)存大小的文件吧2024-03-03
springboot實(shí)現(xiàn)mock平臺(tái)的示例代碼
本文主要介紹了springboot實(shí)現(xiàn)mock平臺(tái)的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-06-06
Springmvc數(shù)據(jù)回顯實(shí)現(xiàn)原理實(shí)例解析
這篇文章主要介紹了Springmvc數(shù)據(jù)回顯實(shí)現(xiàn)原理實(shí)例解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-09-09
如何解決SpringBoot2.6及之后版本取消了循環(huán)依賴的支持問(wèn)題
循環(huán)依賴指的是兩個(gè)或者多個(gè)bean之間相互依賴,形成一個(gè)閉環(huán),SpringBoot從2.6.0開始默認(rèn)不允許出現(xiàn)Bean循環(huán)引用,解決方案包括在全局配置文件設(shè)置允許循環(huán)引用存在、在SpringApplicationBuilder添加設(shè)置允許循環(huán)引用、構(gòu)造器注入2024-10-10
SpringBoot3實(shí)現(xiàn)國(guó)際化的代碼步驟
國(guó)際化,簡(jiǎn)稱 i18n,源自國(guó)際化英文單詞 internationalization 中首字母 i 與尾字母 n 之間有 18 個(gè)字母,本文給大家介紹了SpringBoot3實(shí)現(xiàn)國(guó)際化的操作步驟,并通過(guò)代碼示例講解的非常詳細(xì),需要的朋友可以參考下2024-12-12
如何使用IntelliJ IDEA中的Live Templates自定義代碼模板
在IntelliJ IDEA中,通過(guò)使用LiveTemplates功能,可以實(shí)現(xiàn)快速編碼和自定義代碼模板,例如,輸入“main”可以自動(dòng)補(bǔ)全主函數(shù)結(jié)構(gòu),“sout”可以補(bǔ)全輸出語(yǔ)句,用戶可以通過(guò)設(shè)置中的LiveTemplates選項(xiàng)查看和定義快捷模板,支持使用分組管理和參數(shù)化模板內(nèi)容,適應(yīng)復(fù)雜的編碼需求2024-11-11
java.util.Collections類—emptyList()方法的使用
這篇文章主要介紹了java.util.Collections類—emptyList()方法的使用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-11-11
idea創(chuàng)建springboot項(xiàng)目,java版本只能選擇17和21的解決方案
這篇文章主要介紹了idea創(chuàng)建springboot項(xiàng)目,java版本只能選擇17和21的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2025-04-04

