Что делает самосопоставимый интерфейс в классе коллекций?

Практикуя рефлексию, я узнал о SelfComparable Interface в Collections учебный класс

interface java.util.Collections$SelfComparable

Для чего используется этот интерфейс?

2 ответа

Решение

Это ничего не делает. Это личное, поэтому вы не можете импортировать его.

Это действительно комментарий, что тип "SelfComparable" и на самом деле не используется.

Ничто не реализует этот интерфейс. Код, который его использует, основан на том факте, что он будет отброшен во время выполнения.

public static <T> T max(Collection<? extends T> coll, Comparator<? super T> comp) {
    if (comp==null)
        return (T)max((Collection<SelfComparable>) (Collection) coll);

можно было бы

public static <T> T max(Collection<? extends T> coll, Comparator<? super T> comp) {
    if (comp==null)
        return (T)max(/*SelfComparable*/ (Collection) coll);

как это будет игнорироваться во время выполнения.

Из источника:

private interface SelfComparable extends Comparable<SelfComparable> {}

Это не более чем маркер Comparable<SelfComparable>, что в основном означает, что это маркер для сопоставимых, которые сравнивают с собой. Его использование несколько излишне.

Используется как:

return (T)min((Collection<SelfComparable>) (Collection) coll);

на линии 662, где он в основном бросает коллекцию Collection, а затем выполняет приведение для универсального параметра, чтобы быть SelfComparable который просто расширяется Comparable,

Другие вопросы по тегам