一尘不染

Java泛型T与对象

java

我想知道以下两个方法声明之间有什么区别:

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

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

有什么可以/可以做的,而不是另一种?我在本网站的其他地方找不到这个问题。


阅读 888

收藏
2020-09-09

共1个答案

一尘不染

与上下文隔离-没有区别。在t和两者上,obj您只能调用的方法Object

但是有上下文-如果您有泛型类:

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

然后:

Foo newFoo = my.doSomething(foo);

与对象相同的代码

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

两个优点:

  • 无需强制转换(编译器向您隐藏了此内容)
  • 编译有效的时间安全性。如果使用的是Object版本,则不能确保方法始终返回Foo。如果返回,则在运行时Bar会有一个ClassCastException
2020-09-09