Java 泛型的參數(shù)只可以代表類,不能代表個(gè)別對象。由于 Java 泛型的類型參數(shù)之實(shí)際類型在編譯時(shí)會(huì)被消除,所以無法在運(yùn)行時(shí)得知其類型參數(shù)的類型。Java 編譯器在編譯泛型時(shí)會(huì)自動(dòng)加入類型轉(zhuǎn)換的編碼,故運(yùn)行速度不會(huì)因?yàn)槭褂梅盒投?加快。Java 允許對個(gè)別泛型的類型參數(shù)進(jìn)行約束,包括以下兩種形式(假設(shè) T 是泛型的類型參數(shù),C 是一般類、泛類,或是泛型的類型參數(shù)):T 實(shí)現(xiàn)接口 I 。T 是 C ,或繼承自 C 。一個(gè)泛型類不能實(shí)現(xiàn)Throwable接口。
成都創(chuàng)新互聯(lián)是一家集網(wǎng)站建設(shè),巴青企業(yè)網(wǎng)站建設(shè),巴青品牌網(wǎng)站建設(shè),網(wǎng)站定制,巴青網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,巴青網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競爭力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。
對泛型類 User< T, K > 而言,聲明了兩個(gè)泛型類參數(shù):T 和 K。在類中試圖根據(jù)類型參數(shù)的不同重載 set() 方法。這看起來沒什么問題,可編譯器會(huì)報(bào)錯(cuò)
public class User<T, K> {
//重載錯(cuò)誤
public void set(T t) {
}
//重載錯(cuò)誤
public void set(K k) {
}
}
首先,當(dāng)聲明 User 對象時(shí),T 和 K 實(shí)際上不需要一定是不同的類型,以下的兩種寫法都是正確的
public class GenericMain {
public static void main(String[] args) {
User<String, Integer> stringIntegerUser = new User<>();
User<String, String> stringStringUser = new User<>();
}
}
對于第二種情況,T 和 K 都將被 String 替換,這使得 set() 方法的兩個(gè)版本完全相同,所以會(huì)導(dǎo)致重載失敗。
此外,對 set() 方法的類型擦除會(huì)使兩個(gè)版本都變?yōu)槿缦滦问剑?/p>
一樣會(huì)導(dǎo)致重載失敗
public void set(Object o) {
}
不能創(chuàng)建類型參數(shù)的實(shí)例。因?yàn)榫幾g器不知道創(chuàng)建哪種類型的對象,T 只是一個(gè)占位符
public class User<T> {
private T t;
public User() {
//錯(cuò)誤
t = new T();
}
}
靜態(tài)成員不能使用在類中聲明的類型參數(shù),但是可以聲明靜態(tài)的泛型方法
public class User<T> {
//錯(cuò)誤
private static T t;
//錯(cuò)誤
public static T getT() {
return t;
}
//正確
public static <K> void test(K k) {
}
}
不能實(shí)例化元素類型為類型參數(shù)的數(shù)組,但是可以將數(shù)組指向類型兼容的數(shù)組的引用
public class User<T> {
private T[] values;
public User(T[] values) {
//錯(cuò)誤,不能實(shí)例化元素類型為類型參數(shù)的數(shù)組
this.values = new T[5];
//正確,可以將values 指向類型兼容的數(shù)組的引用
this.values = values;
}
}
此外,不能創(chuàng)建特定類型的泛型引用數(shù)組,但使用通配符的話可以創(chuàng)建指向泛型類型的引用的數(shù)組
public class User<T> {
private T[] values;
public User(T[] values) {
this.values = values;
}
}
public class GenericMain {
public static void main(String[] args) {
//錯(cuò)誤,不能創(chuàng)建特定類型的泛型引用數(shù)組
User<String>[] stringUsers = new User<>[10];
//正確,使用通配符的話,可以創(chuàng)建指向泛型類型的引用的數(shù)組
User<?>[] users = new User<?>[10];
}
}
泛型類不能擴(kuò)展 Throwable,意味著不能創(chuàng)建泛型異常類
當(dāng)前文章:泛型在Java中的應(yīng)用
文章分享:http://chinadenli.net/article0/ihcpio.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)建站、企業(yè)網(wǎng)站制作、微信公眾號、網(wǎng)站設(shè)計(jì)、小程序開發(fā)、建站公司
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)