2013-08-19 17 views
0

Я наткнулся на кусок кода. Что означает эта строка кода? public class Queue<E extends Element>{ Я понимаю, что E может быть любым объектом, но зачем добавлять extends Element. Элемент - это отдельный класс, содержащий 2 переменные + геттеры и сеттеры. Каковы преимущества/недостатки использования этого синтаксиса?code explatation in java

+2

Он ограничивает 'Queue' только только способным содержать' Object ', которые простираются от' Element'. Это в основном означает, что, по крайней мере, эта «очередь» будет содержать только экземпляры «Элемента» (или Объекты, которые простираются от него) ... Вы должны взглянуть на [Generics] (http://docs.oracle .com/javase/tutorial/java/generics /) для более подробной информации;) – MadProgrammer

+0

Просто пройти - [Часто задаваемые вопросы по генераторам - Параметры параметров) (http://www.angelikalanger.com/GenericsFAQ/FAQSections/TypeParameters.html#Bounds). –

ответ

4

Это означает, что вы можете создать конкретный экземпляр Queue<E>, только если E распространяет Element. Так, например, эта декларация потерпит неудачу:

Queue<String> q; // Invalid 

... потому что String не распространяется Element.

Это полезно, потому что в рамках реализации Queue<E>, вы (и компилятор) знать E имеет свойства и методы Element, и поэтому вы можете использовать их. Если объявление было только public class Queue<E>{, то если вы попытались использовать Element свойства или методы аргументов и членов E, то компилятор будет жаловаться, потому что эти свойства/методы не существуют на Object.

+0

+ для примера – Dodi

1

Тип E что генерируемый класс Queue должен быть унаследован от Element.

Код в классе Queue зависит от (имеет призывы) методы класса Element.