<? extends Object>
является ALMOST бесполезно. Все это означает, что вы работаете с чем-то, что не является примитивным типом. <? extends T>
означает, что вы работаете с объектом, который имеет тип T
или подкласс T
и имеет любые методы и поля T
.
<? extends T>
Полезно объявить, что должен содержать объект. Он ограничивает объем контейнера или метод, который добавляет функциональность в метод/контейнер.
Для примера:
public class foobination<T extends foo>
{
private <? extends T> foo;
public foobination(T foo)
{
this.foo = foo;
}
public getFoo() { return foo; }
public void myFoobinator(<? extends T> foob)
{
foo.bash("foobinator was here");
foo.setBang(foob.getBang());
}
}
другой общий случай использования будет: List<? extends T>
Где вы храните коллекцию чего-то, и вы не знаете точно, что это такое, но вы знаете, все они будут подкласс любого T. Таким образом, вы, по крайней мере, имеете некоторое представление о том, чего ожидать, чтобы вернуться из коллекции.
Это кажется немного общим. Вы сначала изучили дженерики? Вы бы это знали, если бы у вас было - canonical tut - http://docs.oracle.com/javase/tutorial/java/generics/ – Coffee
исправить меня, если im 'wrong - T обычно используется в примерах, в реальной жизни он должен быть значимым именем ... – Coffee
@Adel Вы ошибаетесь. – NullUserException