在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)

 

转载:https://www.cnblogs.com/xujanus/p/8474553.html

 

带着疑问去思考,然后串联,进而归纳总结,不断追问自己,进行自我辩证,像侦查嫌疑案件一样看待技术问题,漆黑的街道,你我一起寻找线索,你就是技术界大侦探福尔摩斯

推荐这些文章:

通过ref返回解决C# struct结构体链式调用的问题

通常结构体不能进行链式调用,因为返回值是一个新的值,需要赋回原值。但现在通过ref关键字配合扩展方法,也能进行链式调用了。
 
结构体:

public struct Foo
{
public int a;

public Foo AddOne()
{
a++;

return this;
}

public Foo AddTwo()
{
a += 2;

return this;
}
}

 
执行测试:

Foo foo = new Foo();
...

关于C#泛型的一个问题 请教

问题
是这样
List<myclass> classlist = new List<myclass>();
Object _obj = classlist as Object;
int i = doObject(_obj);
 
 
public intdoObject(Object _obj){
  返回classlist的count
}

最佳回答
classlist.Count 可以直接取到,你还需要什么intdoObject()? ...

使用类做为Dictionary<T,K>的key需什么要求?

问题
<P>&nbsp;</P>

最佳回答
没有要求

...

.net中 String Object 为什么是基元类型

问题
再看CLR时,看到基元类型。
 
其他基元类型都是值类型。
 
只有 object 和 string 是引用类型。
 
why?

最佳回答
看重点,不要再命名上去纠结,只是.net这么叫的而已

...

C++调用无参构造函数

在声明类对象时,如果想调用类的无参构造函数,一般会直接声明,不加括号。举个例子

class Foo {
public:
Foo() {
std::cout << "constructor without arguments called";
}
void show(){
std::cout << "show foo";
}
}
int main() {
Foo foo; //运行正常
//Foo foo{}; //运行正常
...

jetty之maven配置

<!-- jetty 插件配置 --><plugin> <groupId>org.mortbay.jetty</groupId> <artifactId>jetty-maven-plugin</artifactId> <version>7.1.6.v20100715</version> <configuration> <stopPort>9988</stopPort> <stopKey>foo</stopKey> ...

判断值的类型并返回

const valType = (target) => {
const template = {
"[object Array]":"array",
"[object Object]":"object",
"[object Number]":"number",
"[object Boolean]":"boolean",
"[object String]":"string"
}
if(!target) return 'null';
const t = Object.prototype.toStr...

返回集合使用IEnumerable<>还是IList<>

问题
返回集合使用IEnumerable<>还是IList<>
 
那个好啊

最佳回答
一般都是用IEnumerable<>
如果能返回明确类型的话,那么返回明确类型会更好。

...

Maven <build>

1. <build>

1.1 <resources>

编译保留 *.propertie s,*.xml

1.2 <plugins>

拷贝config目录
Java 1.8 编译
一般打包(无Spring)
Spring 打包

2. <properties>

编码 编译版本

1. <build>
1.1 <resources>
编译保留 *.propertie s,*.xml
<resource>
<directory>src/main/java</dire...

文章标题:在JAVA中返回类型使用泛型T和Object有什么区别?
文章链接:https://www.dianjilingqu.com/51560.html
本文章来源于网络,版权归原作者所有,如果本站文章侵犯了您的权益,请联系我们删除,联系邮箱:saisai#email.cn,感谢支持理解。
THE END
< <上一篇
下一篇>>