2013-06-05 8 views
-1

Я пытаюсь узнать дженерики, и у меня были некоторые вопросы о подстановочных знаках и их использовании.В java generics какая разница между символами подстановки: <? extends Object> и <? extends T>?

В чем разница между подстановочными знаками для верхней и нижней границ и, в частности, в чем разница между: <? extends Object> и <? extends T> в java?

+0

Это кажется немного общим. Вы сначала изучили дженерики? Вы бы это знали, если бы у вас было - canonical tut - http://docs.oracle.com/javase/tutorial/java/generics/ – Coffee

+0

исправить меня, если im 'wrong - T обычно используется в примерах, в реальной жизни он должен быть значимым именем ... – Coffee

+6

@Adel Вы ошибаетесь. – NullUserException

ответ

1

Проверьте этот вопрос на "верхней и нижней границах" - SO link.

Для получения дополнительной информации по родовому check here

Что касается разницы между <? extends Object> и <? extends T>, бывшим типом, который связан с типом java.lang.Object, тогда как второй связан с типом переменной T - означает, что вы можете удовлетворить любым типом, который расширяет java.lang.Object (который является всеми типами Java) в первом и последнем, вы можете удовлетворить любым типом, который расширяет тип T. Помните, что T может быть любым - даже java.lang.Object.

0

<? 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. Таким образом, вы, по крайней мере, имеете некоторое представление о том, чего ожидать, чтобы вернуться из коллекции.

+6

Дженерики не работают с примитивами в Java – NullUserException

+0

Я стою исправлено. Думаю, это означает ' 'бесполезно в конце концов, если нет какой-либо другой тонкости, которой я не хватает. – Raystorm

+0

@NullUserException Вот почему второе предложение правильно, нет? –

Смежные вопросы