2016-05-23 3 views
1

Так у меня есть некоторый код, который делает:Проблемы с Дженерики и расширяет

abstract class Node< T extends Comparable<T>, N extends Node<T, N> > 
{ ... 
} 

Так я право сказать, что, когда тип T используется в этом объекте узла, тип Т должен иметь свойство быть сравнимый? Кроме того, N extends Node просто означает, что когда тип N используется в этом объекте N, N должен быть узлом, который имеет свойства T и N? Да, это звучит запутанно, но я прав в своей интерпретации? Благодаря!

+0

Это определение не компилируется. Пожалуйста, обновите его, поскольку где-то отсутствует закрывающая скобка. – Renato

+0

Только что обновлено с помощью редактирования. Это ты имел в виду? – chris123

+0

Он до сих пор не компилируется. – Renato

ответ

0

Да, это правильно. Но ... Я понимаю, что узел - это узел, подобный дереву, не так ли? К сожалению, это плохая идея использовать N для большего количества текущего значения, такого как тип для детей и для родителя.

abstract class Node<T extends Comparable<T>, N extends Node<T, N>> { 
    private Set<N> children = new LinkedHashSet<N>(); 
    private N parent = null; 
    private T nodeValue = null; 
} 

В этом случае вы будете иметь проблемы, Node<Integer,?> активен для полного Древа. Каждый узел в дереве должен содержать только целые числа, потому что вы рекурсивно вынуждаете детей и родителей содержать только целые числа!

Смежные вопросы