можно ли проверить тип параметра generic

111
15 марта 2021, 16:30

Можно ли проверить непосредственно тип самого параметра в классе generic? типа этого?

class ComparatorBack<T> implements Comparator<T> {
@Override
public int compare(T o1, T o2) {
    if (T instanceof Person) {
        if (((Person)o1).age == ((Person)o2).age) {
            return 0;
        } else if (((Person)o1).age < ((Person)o2).age) {
            return 1;
        } else if (((Person)o1).age > ((Person)o2).age) {
            return -1;
        }
    }
    return 0;
 }}
Answer 1

Можно проверить только типы объектов, типов generic'ов вообще в рантайме нет.

if (o1 instanceof Person && o2 instanceof Person) {
  ...
}
return o1 instanceof Person ? -1 : 1;
Answer 2

Можно сделать все намного проще

class ComparatorBack implements Comparator<Person> {
    @Override
    public int compare(Person o1, Person o2) {
        return Integer.compare(o2.age, o1.age);
    }
}

Ключевым будет то, что мы сразу имплементируем интерфейс Comparator, у которого generic будет Person

READ ALSO
Как перенести приложение с spring data на hibernate?

Как перенести приложение с spring data на hibernate?

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

91
как из метода subscribe вернуть observable значение в rxjava2?

как из метода subscribe вернуть observable значение в rxjava2?

Идея такова: Вставляю список в БД, подписываюсь на вставку, при успешной вставке, возвращается список id вставленных элементов, по этому списку...

102
Ссылка на метод экземпляра

Ссылка на метод экземпляра

Не могу понять как это работает

119
Не получается достать jsonArray из json(null)

Не получается достать jsonArray из json(null)

Задача: достать все посты из открытой группы

103