Я наткнулся на кусок кода. Что означает эта строка кода? public class Queue<E extends Element>{
Я понимаю, что E может быть любым объектом, но зачем добавлять extends Element
. Элемент - это отдельный класс, содержащий 2 переменные + геттеры и сеттеры. Каковы преимущества/недостатки использования этого синтаксиса?code explatation in java
ответ
Это означает, что вы можете создать конкретный экземпляр Queue<E>
, только если E
распространяет Element
. Так, например, эта декларация потерпит неудачу:
Queue<String> q; // Invalid
... потому что String
не распространяется Element
.
Это полезно, потому что в рамках реализации Queue<E>
, вы (и компилятор) знать E
имеет свойства и методы Element
, и поэтому вы можете использовать их. Если объявление было только public class Queue<E>{
, то если вы попытались использовать Element
свойства или методы аргументов и членов E
, то компилятор будет жаловаться, потому что эти свойства/методы не существуют на Object
.
+ для примера – Dodi
Тип E
что генерируемый класс Queue
должен быть унаследован от Element
.
Код в классе Queue
зависит от (имеет призывы) методы класса Element
.
Он ограничивает 'Queue' только только способным содержать' Object ', которые простираются от' Element'. Это в основном означает, что, по крайней мере, эта «очередь» будет содержать только экземпляры «Элемента» (или Объекты, которые простираются от него) ... Вы должны взглянуть на [Generics] (http://docs.oracle .com/javase/tutorial/java/generics /) для более подробной информации;) – MadProgrammer
Просто пройти - [Часто задаваемые вопросы по генераторам - Параметры параметров) (http://www.angelikalanger.com/GenericsFAQ/FAQSections/TypeParameters.html#Bounds). –