Java 泛型的參數(shù)只可以代表類,不能代表個別對象。由于 Java 泛型的類型參數(shù)之實際類型在編譯時會被消除,所以無法在運行時得知其類型參數(shù)的類型。Java 編譯器在編譯泛型時會自動加入類型轉換的編碼,故運行速度不會因為使用泛型而 加快。Java 允許對個別泛型的類型參數(shù)進行約束,包括以下兩種形式(假設 T 是泛型的類型參數(shù),C 是一般類、泛類,或是泛型的類型參數(shù)):T 實現(xiàn)接口 I 。T 是 C ,或繼承自 C 。一個泛型類不能實現(xiàn)Throwable接口。
建網(wǎng)站原本是網(wǎng)站策劃師、網(wǎng)絡程序員、網(wǎng)頁設計師等,應用各種網(wǎng)絡程序開發(fā)技術和網(wǎng)頁設計技術配合操作的協(xié)同工作。成都創(chuàng)新互聯(lián)專業(yè)提供網(wǎng)站制作、成都網(wǎng)站制作,網(wǎng)頁設計,網(wǎng)站制作(企業(yè)站、自適應網(wǎng)站建設、電商門戶網(wǎng)站)等服務,從網(wǎng)站深度策劃、搜索引擎友好度優(yōu)化到用戶體驗的提升,我們力求做到極致!對泛型類 User< T, K > 而言,聲明了兩個泛型類參數(shù):T 和 K。在類中試圖根據(jù)類型參數(shù)的不同重載 set() 方法。這看起來沒什么問題,可編譯器會報錯
public class User {
//重載錯誤
public void set(T t) {
}
//重載錯誤
public void set(K k) {
}
}
首先,當聲明 User 對象時,T 和 K 實際上不需要一定是不同的類型,以下的兩種寫法都是正確的
public class GenericMain {
public static void main(String[] args) {
User stringIntegerUser = new User<>();
User stringStringUser = new User<>();
}
}
對于第二種情況,T 和 K 都將被 String 替換,這使得 set() 方法的兩個版本完全相同,所以會導致重載失敗。
此外,對 set() 方法的類型擦除會使兩個版本都變?yōu)槿缦滦问剑?/p>
一樣會導致重載失敗
public void set(Object o) {
}
不能創(chuàng)建類型參數(shù)的實例。因為編譯器不知道創(chuàng)建哪種類型的對象,T 只是一個占位符
public class User {
private T t;
public User() {
//錯誤
t = new T();
}
}
靜態(tài)成員不能使用在類中聲明的類型參數(shù),但是可以聲明靜態(tài)的泛型方法
public class User {
//錯誤
private static T t;
//錯誤
public static T getT() {
return t;
}
//正確
public static void test(K k) {
}
}
不能實例化元素類型為類型參數(shù)的數(shù)組,但是可以將數(shù)組指向類型兼容的數(shù)組的引用
public class User {
private T[] values;
public User(T[] values) {
//錯誤,不能實例化元素類型為類型參數(shù)的數(shù)組
this.values = new T[5];
//正確,可以將values 指向類型兼容的數(shù)組的引用
this.values = values;
}
}
此外,不能創(chuàng)建特定類型的泛型引用數(shù)組,但使用通配符的話可以創(chuàng)建指向泛型類型的引用的數(shù)組
public class User {
private T[] values;
public User(T[] values) {
this.values = values;
}
}
public class GenericMain {
public static void main(String[] args) {
//錯誤,不能創(chuàng)建特定類型的泛型引用數(shù)組
User[] stringUsers = new User<>[10];
//正確,使用通配符的話,可以創(chuàng)建指向泛型類型的引用的數(shù)組
User>[] users = new User>[10];
}
}
泛型類不能擴展 Throwable,意味著不能創(chuàng)建泛型異常類
另外有需要云服務器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。