Как заставить обратную сортировку работать с универсальными типами классов - PullRequest
0 голосов
/ 19 апреля 2019

У меня есть класс с универсальным атрибутом.

public class MyClass<T> {

    T data;

    MyClassType source;

    ZonedDateTime updatedTime;
}

Я пытаюсь отсортировать список вышеупомянутого класса, содержащий различные типы T, в обратном порядке

myClassList.sort(Comparator.comparing(MyClass::getUpdatedTime).reversed()); //Doesn't work

Ошибка: (372, 61) Java: несовместимые типы: невозможно определить переменные типа (типов) T, U (несоответствие аргумента; недопустимый метод ссылки на метод getUpdatedTime в классе com.quicken.subscriptionservice.dtos.UnifiedHistoryResponse не может бытьприменяется к заданным типам: обязательные аргументы не найдены: java.lang.Object причина: фактические и формальные списки аргументов различаются по длине)

Ошибка: (372, 62) java: недопустимая ссылка на метод нестатический метод getUpdatedTime () нельзя ссылаться из статического контекста

Если я удаляю ".reversed" в сортировке, это работает без проблем.

Также, если я изменю свой класс, чтобы использовать вместо него класс Objectиз общих типов, как показано ниже, это работает.

public class MyClass {

    Object data;

    MyClassType source;

    ZonedDateTime updatedTime;
}

Теперь сортировка ниже работает

myClassList.sort(Comparator.comparing(MyClass::getUpdatedTime).reversed()); //Now works

Я был бы признателен, если кто-то может помочь мне понять, как я могу получитьобратная сортировка, чтобы работать для общего случая и помочь мне понять, почему я получаю ошибку, упомянутую выше.

Ответы [ 2 ]

0 голосов
/ 20 апреля 2019

Я нашел способ использовать дженерики, используя подстановочный знак, как показано ниже

myClassList.sort(Comparator.comparing((MyClass<?> r) -> r.getUpdatedTime()).reversed());

Это достаточно хорошо для меня. Надеюсь, это поможет кому-то, кто интересуется тем же вопросом.

0 голосов
/ 19 апреля 2019

Если вы используете класс объекта, вы переводите объекты в класс объекта.Это не общее программирование.Вам необходимо параметризовать ссылку на метод.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...