Это расширение этого previous question о параметризованных методах. Я читаю ту же книгу. После того, как пример в предыдущем вопросе, автор улучшает классGenerics and Parameterized Constructors
BinaryTree<T extends Comparable<? super T>>
еще раз (и он действительно в этот раз), добавив следующий конструктор
public <E extends T> BinaryTree(E[] items) {
for(E item : items) {
add(item);
}
В духе предыдущего вопроса Я попробовал этот конструктор вместо:
public BinaryTree(T[] items) {
for(T item : items) {
add(item);
}
}
и пример кода не компилировать с моим конструктором:
public static void main(String[] args) {
Manager[] managers = { new Manager("Jane", 1), new Manager("Joe", 3), new Manager("Freda", 3), new Manager("Bert", 2), new Manager("Ann", 2), new Manager("Dave", 2) };
BinaryTree<Person> people = new BinaryTree<>(managers);
}
В чем разница между изменением метода add() в предыдущем вопросе и изменением этого конструктора? Почему я не могу передать подтип T в моем конструкторе?
Все это имеет смысл, спасибо. Поэтому я думаю, что нет смысла использовать BinaryTree (E [] items) –
Нет смысла, так как 'T []' arg будет принимать любые 'X []' где 'X' является подтипом' T' , Обратите внимание, что это не будет работать для 'List'. Если мы хотим принять любой 'List', где 'X' является подтипом' T', нам нужен 'List extends T>' как тип arg. –
irreputable