泛型和類型安全的容器的基本認知
Java對泛型和安全容器的基本認知用下面代碼來表示:
首先定義一個類為fruit
public class Fruit {
private static int id;
// 定義成靜態的,不用每次實例化的時候都開辟一塊內存空間,直接用即可
private final int count = id++;
public int id() {
System.out.println("count=" + count);
return count;
}
}
public class Vegetable {
}
public class FruitAndVegetable {
public static void main(String[] args) {
ArrayList fruit = new ArrayList(); // 不加泛型默認都是object類型的
for(int i = 0;i < 10;i++) {
fruit.add(new Fruit());
//在一個容器中,可以理解為盤子,在這個盤子中放入水果,這個盤子默認是什么都能放的盤子
}
fruit.add(new Vegetable());//在容器中放入蔬菜
for(int i = 0;i < fruit.size();i++) {
// 把放進去的實例(水果、蔬菜)進行遍歷
((Fruit)fruit.get(i)).id(); //默認取出來是object類型,需要把它轉換成你想要的Fruit類型
}
}
count=0
count=1
count=2
count=3
count=4
count=5
count=6
count=7
count=8
count=9
Exception in thread "main"
java.lang.ClassCastException
: test.Vegetable cannot be cast to test.Fruit
at test.FruitAndVegetable.main(
FruitAndVegetable.java:16
)
因為你盤子中放的是Fruit 和 Vegetable ,但是這兩者沒有任何關系,你只把它轉化成Fruit,vegetable類型是不安全的,vegetable類型無法轉化為Fruit類型,所以會報錯,解決上述問題,只要讓他們發生關系即可
解決方法1:
public class Vegetable extends Fruit{
}
只要把上述Object類型的盤子轉換為只能放Fruit類型的盤子即可
ArrayList
Java 容器
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。