Что это объявление класса означает в Java?

Я просто учусь до дерева и одной вещи, которую я не понимаю об этом, объявление класса:

например: класс BinarySearchTree<T extends Comparable<? super T>>.

Теперь, можно ли объяснить меня, что находится в скобке и"<? super T>"?

Какой-либо хороший источник можно ли отослать меня к?Спасибо.

6
задан nanda 14 January 2010 в 13:07
поделиться

5 ответов

Объявляется класс с одним общим параметром типа. Так как для дерева двоичного поиска крайне важно, чтобы оно могло сравнивать два элемента, то это нужно указать, чтобы компилятор мог это проверить.

Часть в угловых скобках является параметром типа T и ограничением для него, которое гласит:

  • Что бы ни было T, оно должно расширять Comparable (>).
  • Сказал <сопоставимый должен быть в состоянии сравнить себя либо с T, либо с супер-классом T ().

Поскольку T обычно может быть чем угодно, что ограничивает выбор типов, для которых имеет смысл реализовать дерево поиска.

16
ответ дан 8 December 2019 в 05:55
поделиться

средства это ? родитель T. Если ? известен (например X ), можно использовать

РЕДАКТИРОВАНИЕ : Это - хороший источник для Универсального Java: http://java.sun.com/j2se/1.5/pdf/generics-tutorial.pdf

5
ответ дан 8 December 2019 в 05:55
поделиться

Учебное пособие солнца - это хорошее место для начала изучения подстановочных знаков и дженериков.

Java Ranch также очень хорошо для Java "Greenhorns".

0
ответ дан 8 December 2019 в 05:55
поделиться

Скобки <> предназначены для того, что называется дженериками. Это очень похоже на шаблон в C++ и позволяет создать единую структуру данных, которая может быть сильно напечатана. Например, объект ArrayList использует дженерик для определения типа элементов в ArrayList:

ArrayList<String> - an ArrayList containing Strings
ArrayList<MyClass> - an ArrayList containing MyClass objects

Когда вы определяете структуру, использующую дженерики, которые вы используете для обозначения выше. T" - это место для некоторого класса, которое заполняется, когда класс инстанцируется и ему присваивается тип. Например, определение ArrayList может выглядеть следующим образом:

public class ArrayList<T> ...

Самый простой способ - это просто использовать MyGeneric и позволить использовать любой класс. Однако, иногда вы хотите, чтобы герика использовалась только с классами в определенной структуре наследования. В этом конкретном случае Comparable означает, что это будет объект, который расширяет Comparable the Compares any type of object, который соответствует T или является супер-классом T.

.
1
ответ дан 8 December 2019 в 05:55
поделиться

Фраза - это подстановочный знак и подразумевает, что класс Binarysearchtree может принимать:
a. Параметр типа (T), который расширяется сопоставимым
б. А также может взять подтип (ы), родитель которого расширяется сопоставимым

конструкции расширяет утилиту класса Binarysearchtree Тип (ы), которые реализуются сопоставимы и его подтипы.

Ниже, фрагмент кода демонстрирует это:

// Below declaration of Helper class doesn't uses the wildcard super
class Helper<T extends Comparable<T>> {
     // some helper methods
}

abstract class Animal implements Comparable<Animal> {
    public int compareTo(final Animal o) {
       // implementation ...           
    }
    // other abstract methods
}

class Mammal extends Animal {
    // implement abstract methods
}

С вышеуказанной декларацией заявление Helper <113200] X = новый помощник () работает нормально.
Но утверждение: Helper X = новый помощник <млекопитающее> () дает ошибку компиляции
Тип параметра млекопитающее не находится в пределах его
(версия компилятора javac 1.5.0_06 )

Когда декларация класса Helper изменяется на ниже форму:

class Helper<T extends Comparable<? super T>> {
     // some helper methods
}

Тогда заявление Helper X = новый помощник <млекопитающее> () не дает никакой ошибки компилятора.

При этом использование подстановочного знака максимизирует полезность класса.

0
ответ дан 8 December 2019 в 05:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: