【问题标题】:What is the point of T extends SomeClass?T 扩展 SomeClass 的意义何在?
【发布时间】:2013-12-18 15:17:28
【问题描述】:

这样的方法声明有什么区别:

public <T extends SomeClass> void doSomething(T obj)
{
    // Do something.
}

还有这个:

public void doSomething(SomeClass obj)
{
    // Do Something.
}

在我看来,他们都指定传入的对象必须SomeClass类型的子类,那么在这种情况下为什么还要使用泛型呢? p>

【问题讨论】:

  • 我经常想知道这一点,但由于害怕可怕的 {-1} 而没有足够的勇气问。所以+1。
  • 说“Java 泛型完全没用”是一个大胆且不正确的说法。我不否认它们有缺陷且功能齐全,但这并不意味着它们毫无用处
  • 天哪,再次抱歉,我似乎无法阅读,所以我要回家了。在上述情况下,没有意义,但在其他特定情况下,根据下面 micha 的回答,它可能很有用。该实现适用于开发人员而不是计算机,适用于那些碰巧对人有用的情况!
  • 在上面的例子中我看不出有什么区别,但是如果返回类型是 T 类型,它会的。在这种情况下,客户端代码不必强制转换。

标签: java generics


【解决方案1】:

在你的情况下没有太大区别。

但请考虑以下几点:

public <T extends SomeClass> void doSomething(List<T> obj)

在这种情况下,您可以通过以下方式调用该方法:

obj.doSomething(new ArrayList<SubclassOfSomeClass>());
obj.doSomething(new ArrayList<SomeClass>());

如果你会使用

public void doSomething(List<SomeClass> obj)

你只能这样做:

obj.doSomething(new ArrayList<SomeClass>());

【讨论】:

  • 但是 public void doSomething(List&lt;? extends SomeClass&gt; obj) 对于这个特定的例子来说很好。
  • @PaulBellora 除非有第二个参数public &lt;T extends SomeClass&gt; void doSomething(List&lt;T&gt; obj, T bar)
  • @ratchetfreak 对,这是一个更好的例子。
猜你喜欢
  • 1970-01-01
  • 2020-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-31
相关资源
最近更新 更多