在JAVA中返回类型使用泛型T和Object有什么区别?

Posted 系统攻城狮

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在JAVA中返回类型使用泛型T和Object有什么区别?相关的知识,希望对你有一定的参考价值。

最近在读jackson源码的时候发现有段代码返回类型写的是<T> T,而我自己一般写的是Object。上网搜了下这个语法糖,在stackoverflow上找到一个比较简单易懂的解释,搬运过来(https://stackoverflow.com/questions/5207115/java-generics-t-vs-object)

问题:下面2个方法的声明有何不同

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

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

答案:

单从上文2个方法声明来说-没有区别。无论是t 还是 obj,你都只能调用Object类型的参数和返回值。

但是基于上面2个方法,如果你有一个使用了泛型的类:

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

就可以这么写:

Foo newFoo = my.doSomething(foo);

但是如果是使用object的话,就得这么写

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

由此可见,使用泛型,有2个好处:

1.不需要做强制类型转换

2.编译时更安全。如果使用Object类的话,你没法保证返回的类型一定是Foo,也许是其它类型。这时你就会在运行时得到一个类型转换异常(ClassCastException)

 

以上是关于在JAVA中返回类型使用泛型T和Object有什么区别?的主要内容,如果未能解决你的问题,请参考以下文章

求java泛型解释

java中Class<T>类型和不写<T>的区别

java中E,T,?的区别?

请教关于java的泛型方法

请教关于java的泛型方法

java中返回值类型<T> T 这两个T分别代表啥?