2014-12-04 2 views
0

Класс со следующим объявлением будет скомпилирован и запущен, но вызывает ли это что-либо ненужное с памятью?О Java Generics

public class Node<T extends Node<T>> extends NodeContainer<T>

Мой страх, что это может в конечном итоге привести некоторый тип бесконечной рекурсии:

ли Node<T extends Node<T>> означает Node<T extends Node<T extends Node<T(...)>>> и т.д.?

ответ

2

Нет, ничего не произойдет с памятью. Поскольку стирание типа вступает в силу, общий параметр не рассматривается во время выполнения, за исключением выполнения во время выполнения, и фактически удаляется. Компилятор просто гарантирует, что T действительно расширяет или реализует Node<T>.

0

Что вы пытаетесь достичь связи Узел>? Это действительно не имеет смысла Если вы работаете с узлами (я предполагаю, что есть некоторые суб ребенок вещь ??) если да, это может быть лучше

Node<T> extends NodeContainer<T> { 
    T data; 
    Node<T> child; 
}