Интересно, возможно ли привести не сопоставимое к чему-либо значение, чтобы оно соответствовало параметру метода T, который имеет тип шаблона <T extends Comparable<? super T>>
, например метод Collections.sort()
public static <T extends Comparable<? super T>> void sort(List<T> list)
Предположим, что Iгде-то есть ссылка на список несопоставимых объектов, и я хочу вызвать этот метод путем приведения типа так:
List<E> foo = new List<E>(a);
Collections.sort( /* magic cast */ foo);
Я могу сделать это, если приведу к (List<? extends Comparable>)
, но это выдает предупреждение, что яиспользование raw-типов (в данном случае сопоставимых без шаблонов).Допустим, я хочу избежать использования необработанных типов или даже подавить их с помощью @SuppressWarnings("rawtypes")
(например, чтобы сохранить обратную совместимость и избежать необработанных типов).
Можно ли избежать использования необработанных типов, приведя к (List<? extends Comparable</*something*/>>)
и что это будет за «что-то» (неконтролируемое приведение допустимо)?
РЕДАКТИРОВАТЬ : Этот пример только для иллюстрации.На самом деле у меня нет Comparable, и я не хочу ничего сортировать, но мне просто нужно динамически проверить, имеет ли что-то какой-то тип (Comparable в этом примере) (через instanceof), а затем передать некоторый аргумент методу, который имеет аргументы шаблонааналогично Collections.sort()
методу.