У меня есть класс TreeNode определяются следующим образом:Дженерик с такими же базовым классом
class TreeNode<T extends MyClass> {
public T element;
public TreeNode<? extends MyClass> parent;
public ArrayList<TreeNode<? extends MyClass>> children;
}
Я хотел бы знать, если есть более простой способ, чтобы ограничить все TreeNodes переменных универсального типа, которые простираются MyClass
? Выписать ArrayList<TreeNode<? extends MyClass>>
очень утомительно. Я не могу просто сделать ArrayList<TreeNode<T>>
, потому что тогда Tree не может содержать узлы с другим наследованием MyClass.
Я попытался сделать что-то вроде этого: public static const Class NODE_CLASS = TreeNode<? extends TreeNode>.class;
, но я не думаю, что вы можете использовать generics как часть объекта класса.
Сокетирующий синоним C++ typedef
Я предполагаю, I.e. typedef TreeNode<? extends MyClass> NodeClass;
Если честно, я не вижу смысла использовать дженерики, если 'T' не совпадает между узлами в дереве. Учитывая, что 'element' должен быть просто' MyClass'. –
Ahh да, конечно, просто сделайте их всеми базовыми типами! – Lerp
Точно так же, как sidenote: я бы заменил 'ArrayList <...>' просто «List <...>'. – Thomas