Имеем следующий код внутри класса MyClass:
private static Comparator<Map.Entry<?, ?>> comparator = MyClass::compare;
@SuppressWarnings("unchecked")
private static <K,V> int compare(Map.Entry<K, V> me1, Map.Entry<K, V> me2) {
int f = ((Comparable<K>)me1.getKey()).compareTo(me2.getKey());
if (f!=0) return f;
return ((Comparable<V>)me1.getValue()).compareTo(me2.getValue());
}
Вопрос: Можно ли как то избежать прописывания метода compare(me1,me2)
как метода класса MyClass
так, чтобы иметь что то в следующем роде:
private static Comparator<Map.Entry<?,?>> comparator = (K,V,me1,me2) -> {...};
Было бы здорово заменить токены ?
и ?
в этой строке на K
и V
, которые были бы, к примеру, при классе MyClass<K,V>
, но non-статическое обращение, разумеется, недоступно. Мне важно оставить поле comparator
статическим.
Герберт Шилдт, "Java 8. Полное руководство. Девятое издание." (стр. 446):
Обобщённые функциональные интерфейсы.
Указывать параметры типа в самом лямбда-выражении нельзя. Следовательно, лямбда-выражение не может быть обобщенным.
Значит, без non-статического обращение к type-параметрам класса, содержащего поле comparator
, или без явного прописывания метода compare(me1, me2)
нельзя создать реализацию желаемого компаратора (который имел бы обобщённый метод compare(...)
).
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
ИтакЕсть класс Window(наследник JFrame), у него такой менеджер компоновки:
В веб-приложении используется Spring WebMVC и Spring SecurityВозник вопрос, почему не работает аннотация @PreAuthorize, если повесить её на вложенный метод в классе...