Как сделать объект ассоциации сопоставимым только с одним общим типом параметра - PullRequest
0 голосов
/ 04 октября 2018

Я пытаюсь понять, что на самом деле означает <K, V extends Comparable<? super V>>.

Если вызывается compareTo() для сравнения двух Association<K,V> объектов;какой из двух универсальных типов K или V будет использоваться для сравнения?

Что произойдет, если вместо него будет использоваться <K, V extends Comparable<? super K>>?

public class Association<K, V extends Comparable<? super V>>
{
	K key;
	V value;
	//---------------------------------------
  
        public int compareTo(Association<K, V> object) 
	{
		return this.key.compareTo(object.key);
	}
}

отредактировал метод compareTo().

Ответы [ 2 ]

0 голосов
/ 04 октября 2018

Сначала объясните ваше текущее определение:

public class Association<K, V extends Comparable<? super V>>

Это означает, что вы определяете открытый класс с именем Association Этот класс имеет 2 параметра типа: K и V.Из них V имеет дополнительное ограничение, которое должно быть сопоставимо с ? super V (= V или супертипом V).

Поскольку вы хотите не сравнивать по ключу, ондолжно быть K, то есть Comparable.Кроме того, вы хотите сравнить сами Association, так что это тоже должно быть Comparable.

Так что измените определение вашего класса следующим образом:

public class Association<K extends Comparable<K>, V> implements Comparable<Association<K, V>>

Ваше сравнение будет тогдабыть:

public int compareTo(Association<K, V> other) {
    return key.compareTo(other.key);
}
0 голосов
/ 04 октября 2018

Если CompareTo () вызывается для сравнения двух объектов Ассоциации;Какой из двух универсальных типов K или V будет использоваться для сравнения?

Поскольку Association реализуется прямо сейчас, ни один из них не будет использован.Вместо этого ваш метод compareTo всегда будет выдавать StackOverflowError, потому что он неправильно определен.

(Смысл в том, что класс Association и его определение compareTo несут ответственность за определение ответа на ваш вопрос. Например, вы можете написать public int compareTo(Association<K, V> other) { return value.compareTo(other.value); }.)

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