Java擦除和轉(zhuǎn)換實例分析
本文實例講述了Java擦除和轉(zhuǎn)換。分享給大家供大家參考,具體如下:
一 點(diǎn)睛
在嚴(yán)格的泛型代碼里,帶泛型聲明的類總應(yīng)該帶著類型參數(shù)。但為了與老的Java代碼保持一致,也允許在使用帶泛型聲明的類時不指定類型參數(shù)。如果沒有為這個泛型類指定類型參數(shù),則該類型參數(shù)被稱作一個raw type(原始類型),默認(rèn)是該聲明該參數(shù)時指定的第一個上限類型。
當(dāng)把一個具有泛型信息的對象賦給另一個沒有泛型信息的變量時,則所有在尖括號之間的類型信息都被扔掉了。比如說一個List<String>類型被轉(zhuǎn)換為List,則該List對集合元素的類型檢查變成了成類型變量的上限(即Object),這種情況被為擦除。
二 實戰(zhàn)——擦除
class Apple<T extends Number>
{
T size;
public Apple()
{
}
public Apple(T size)
{
this.size = size;
}
public void setSize(T size)
{
this.size = size;
}
public T getSize()
{
return this.size;
}
}
public class ErasureTest
{
public static void main(String[] args)
{
Apple<Integer> a = new Apple<>(6); // ①
// a的getSize方法返回Integer對象
Integer as = a.getSize();
// 把a(bǔ)對象賦給Apple變量,丟失尖括號里的類型信息
Apple b = a; // ②
// b只知道size的類型是Number
Number size1 = b.getSize();
// 下面代碼引起編譯錯誤
//Integer size2 = b.getSize(); // ③
}
}
三 實戰(zhàn)——擦除與轉(zhuǎn)換
import java.util.*;
public class ErasureTest2
{
public static void main(String[] args)
{
List<Integer> li = new ArrayList<>();
li.add(6);
li.add(9);
List list = li;
// 下面代碼引起“未經(jīng)檢查的轉(zhuǎn)換”的警告,編譯、運(yùn)行時完全正常
List<String> ls = list; // ①
// 但只要訪問ls里的元素,如下面代碼將引起運(yùn)行時異常。
//System.out.println(ls.get(0));
}
}
更多java相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Java面向?qū)ο蟪绦蛟O(shè)計入門與進(jìn)階教程》、《Java數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Java操作DOM節(jié)點(diǎn)技巧總結(jié)》、《Java文件與目錄操作技巧匯總》和《Java緩存操作技巧匯總》
希望本文所述對大家java程序設(shè)計有所幫助。
相關(guān)文章
SpringBoot實現(xiàn)多數(shù)據(jù)源的切換實踐
MyBatis 實現(xiàn)批量插入和刪除中雙層循環(huán)的寫法案例
Java數(shù)據(jù)類型分類與基本數(shù)據(jù)類型轉(zhuǎn)換
ObjectInputStream 和 ObjectOutputStream 介紹_動力節(jié)點(diǎn)Java學(xué)院整理
Spring配置shiro時自定義Realm中屬性無法使用注解注入的解決辦法
Java多線程讀寫鎖ReentrantReadWriteLock類詳解

