Синтаксисна Яве - PullRequest
       21

Синтаксисна Яве

8 голосов
/ 02 сентября 2011

У меня есть пара мыслей относительно следующего:

public interface MaxStack<T extends Comparable <T>>

1-Почему класс, реализующий MaxStack, должен быть написан так:

public class MaxStackclass<T extends Comparable <T>> implements MaxStack<T>

а не public class MaxStackclass<T extends Comparable <T>> implements MaxStack<T extends Comparable <T>>?

2- почему закрытые переменные этого класса, когда я использую дженерики, должны записываться только с <T>, а не с <T extnds Comparable<T>>? Например, private List<T> stack= new ArrayList<T>();

3-В чем разница между <T extends Comparable<T>> и <T extends Comparable> - если мне нужно сравнить одиннадцать элементов в моем классе, оба будут O.K, нет?

Редактировать: Я думаю, что проблема с 3 заключается в том, что, возможно, он позволяет вставить список, который был определен вторым способом, чтобы иметь различные элементы, которые все расширяются от сопоставимых, а затем, когда я хочу сравнить их, он выиграл ' Это невозможно, так как мы не можем сравнивать String с Integer, оба расширяются от Comparable.

Ответы [ 4 ]

9 голосов
/ 02 сентября 2011
  1. В декларации maxStackclass<T extends Comparable <T>> вы уже указали границы для T. Так что вам это больше не нужно.

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

  3. <T extends Comparable<T>> означает, что T должен реализовывать интерфейс Comparable, который может сравнивать два экземпляра T. В то время как <T extends Comparable> означает, что T реализует Comparable так, что он может сравнивать два Object в целом. Первый более конкретен.

если мне нужно сравнить одиннадцать элементов в моем классе, оба будут O.K, нет

Ну, технически вы можете достичь того же результата, используя оба. Но для объявления <T extends Comparable> это потребует ненужных приведений, которые вы можете избежать, используя тип safe <T extends Comparable<T>>

2 голосов
/ 03 сентября 2011

"3-Какая разница между <T extends Comparable<T>> и <T extends Comparable> - если мне нужно сравнить одиннадцать элементов в моем классе, оба будут в порядке, нет?"

Нет, оба не будутХорошо.Предположим, у меня есть класс Foo, который implements Comparable<Bar>, но классы Foo и Bar не имеют никакого отношения друг к другу.Тогда Foo не может сравниваться с другими объектами типа Foo.<T extends Comparable<T>> поймает это как проблему.<T extends Comparable> не будет.

2 голосов
/ 02 сентября 2011

1) у класса есть параметр типа T с границей (extends Comparable <T>), этот параметр передается интерфейсу (которому здесь нужна такая же граница).При передаче параметра типа вы не должны повторять его границу - почему вы должны это делать?

2) как 1), у параметра типа объявлена ​​граница, без необходимости повторения.

Комууточнить:

Первым параметром типа вхождения (здесь за именем интерфейса или класса) является его объявление.Любое последующее событие является использованием.Вы даже никогда не написали бы объявление типа переменных каждый раз, когда используете его, верно?

0 голосов
/ 23 июня 2016
<T extends Comparable<? super T>>

подробнее здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...