Java泛型T与对象

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

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

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

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

回答:

与上下文隔离-没有区别。在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

以上是 Java泛型T与对象 的全部内容, 来源链接: utcz.com/qa/430188.html

回到顶部