在JAVA中返回類型使用泛型T和Object有什麼區別?

最近在讀jackson源碼的時候發現有段代碼返回類型寫的是<T> T,而我本身通常寫的是Object。上網搜了下這個語法糖,在stackoverflow上找到一個比較簡單易懂的解釋,搬運過來(https://stackoverflow.com/questions/5207115/java-generics-t-vs-object)java

問題:下面2個方法的聲明有何不一樣安全

public Object doSomething(Object obj) {....}

public <T> T doSomething(T t) {....}

答案:spa

單從上文2個方法聲明來講-沒有區別。不管是t 仍是 obj,你都只能調用Object類型的參數和返回值。code

可是基於上面2個方法,若是你有一個使用了泛型的類:blog

MyClass<Foo> my = new MyClass<Foo>();
Foo foo = new Foo();

就能夠這麼寫:源碼

Foo newFoo = my.doSomething(foo);

可是若是是使用object的話,就得這麼寫io

Foo newFoo = (Foo) my.doSomething(foo);

因而可知,使用泛型,有2個好處:編譯

1.不須要作強制類型轉換ast

2.編譯時更安全。若是使用Object類的話,你無法保證返回的類型必定是Foo,也許是其它類型。這時你就會在運行時獲得一個類型轉換異常(ClassCastException)class

相關文章
相關標籤/搜索