Типы result
и temp
различны, потому что они представляют разные типы вещей.Давайте посмотрим на этот код:
T result = q.dequeue();
Здесь, то, что мы храним в result
, - это тот тип вещей, который возвращается после удаления из очереди q
.Так какие вещи хранит q
?Рассматривая параметры, мы видим, что q
является Queue<T>
, что означает, что каждый элемент в очереди имеет тип T
.Следовательно, нам нужно дать result
тип T
, поскольку он представляет отдельный элемент, извлеченный из очереди.
С другой стороны, когда мы пишем
Queue<T> temp = new Queue<T>();
цель состоит в том, чтобы создать новый Queue
, который может содержать объекты типа T
.Чтобы сделать это, мы должны сказать Java, что мы хотим, чтобы это было Queue<T>
.
Причина, по которой это отличается от того, когда мы объявили result
, заключается в том, что мы пытаемся делать принципиально разные вещи,result
предназначен для хранения одного элемента, который в данном случае имеет тип T
.temp
предназначен для хранения коллекции предметов, поэтому мы делаем его Queue<T>
, чтобы указать, что это не просто T
, а скорее их очередь.
Надеюсь, это поможет!