在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

相关文章
相关标签/搜索