Есть ли способ сделать этот метод должным образом общим и покончить с предупреждениями?
<code>/**
* <p>Sort a collection by a certain "value" in its entries. This value is retrieved using
* the given <code>valueFunction</code> which takes an entry as argument and returns
* its value.</p>
*
* <p>Example:</p>
* <pre>// sort tiles by number
*Collects.sortByValue(tileList, true, new Function<Integer,NormalTile>() {
* public Integer call(NormalTile t) {
* return t.getNumber();
* }
*});
*
* @param list Коллекция.
* @param ascending Сортировать по возрастанию (
true
) или по убыванию (
false
).
* @param valueFunction Функция, которая извлекает значение записи.
* /
public static void sortByValue (список список, окончательное логическое возрастание, @SuppressWarnings ("rawtypes") final Function <? extends Comparable, T> valueFunction) {
Collections.sort (список, новый компаратор () {
@SuppressWarnings ({"unchecked", "rawtypes"})
@Override public int Compare (T o1, T o2) {
окончательный сопоставимый v1 = valueFunction.call (o1);
окончательный сопоставимый v2 = valueFunction.call (o2);
return v1.compareTo (v2) * (по возрастанию? 1: -1);
}
});
}
Я пытался Function<? extends Comparable<?>, T>
и Function<? extends Comparable<? extends Comparable>, T>
, но не скомпилировал, с ошибкой при вызове compareTo
. Для первого это:
Метод compareTo (capture # 9-of?) В типе Comparable не применим для аргументов (capture # 10-of? Extends Comparable)