T扩展SomeClass有什么意义?

chr*_*her 23 java generics

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

public <T extends SomeClass> void doSomething(T obj)
{
    // Do something.
}
Run Code Online (Sandbox Code Playgroud)

还有这个:

public void doSomething(SomeClass obj)
{
    // Do Something.
}
Run Code Online (Sandbox Code Playgroud)

我看到它的方式,它们都指定传入的对象必须是类型的子类SomeClass,那么为什么在这个实例中根本没有使用泛型呢?

mic*_*cha 28

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

但请考虑以下因素:

public <T extends SomeClass> void doSomething(List<T> obj)
Run Code Online (Sandbox Code Playgroud)

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

obj.doSomething(new ArrayList<SubclassOfSomeClass>());
obj.doSomething(new ArrayList<SomeClass>());
Run Code Online (Sandbox Code Playgroud)

如果你愿意的话

public void doSomething(List<SomeClass> obj)
Run Code Online (Sandbox Code Playgroud)

你只能这样做:

obj.doSomething(new ArrayList<SomeClass>());
Run Code Online (Sandbox Code Playgroud)

  • 但是`public void doSomething(List <?extends SomeClass> obj)`对于这个特定的例子来说没问题. (2认同)