object類和泛型都有助於提高程序的復用性,那么它們的區別是什么呢?又為什么泛型被廣泛使用,而object被打入“冷宮”呢?
其實在jdk1.5版本發布之前,object還是被廣泛使用的
那么讓我們先看看jdk api中對object類的定義:

好吧,定義上並不能看出它的缺點,不過我們得了一個信息:object類的出現遠早於泛型
好像也沒什么用那我們上代碼吧:
public class Dog {
private Object age = 10;
public Object getAge() {
return age;
}
}
public class AnotherDog<L> {
private L age = (L) new Integer(10);
public L getAge() {
return age;
}
}
我定義了兩條Dog,都只含有一個rep即年齡,現在我測試這兩條狗,使它們都增長一歲
public class testDog {
private Dog d = new Dog();
private AnotherDog<Integer> d1 = new AnotherDog<>();
public int addAge() {
int a = (int) d.getAge();
return a+1;
}
public int addAnotherAge() {
return d1.getAge()+1;
}
}
主函數打印狗增加年齡后的歲數
public static void main(String[] args) {
testDog dog = new testDog();
System.out.println(dog.addAge());
System.out.println(dog.addAnotherAge());
}
結果都是11,這沒什么問題。但我們注意到,用object定義狗的歲數時
public int addAge() {
int a = (int) d.getAge();
return a+1;
}
執行增加歲數操作就要進行強制類型轉換
而如果不進行強制類型轉換

連靜態類型檢查都過不了
總結一下,上文已說過早期的時候,我們使用Object來代表任意類型。使用object必然會帶來轉型的問題,向上轉型是沒有任何問題的,但是在向下轉型的時候其實隱含了類型轉換的問題。也就是說這樣的程序並不是安全的。所以Java在JDK5后引入了泛型,提高程序的安全性。
