Что делает самосопоставимый интерфейс в классе коллекций?
Практикуя рефлексию, я узнал о 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
,