Как привести дженерик к Number?

При сравнении 2х дженерик типов нужно сделать что-то типа

boolean test(T t,E e){
 return (Number)e>(Number)t
 }

Как это можно реализовать? Джава позволяет приводить дженерики к Integer & Double , но к Number почему-то нельзя


Ответы (3 шт):

Автор решения: Aziz Umarov

Потому что abstract class Number и объекты которые вы используете должны

  1. Быть потомками Number.
  2. Number должен быть сравнимыми. В Java нет перегрузки операторов так что нужно немного постараться.

И вообще сравнение 2 различных женерика в таком виде

Нужно знать хоть что-то о них по типу

boolean test(<? extends MyInterface> t,<? extends MyInterface> e){
 return ((MyInterface)e).isGreate((MyInterface)t)
}
→ Ссылка
Автор решения: Владимир Карсанов

С такими условиями задача супер нереальная:

boolean test(T t,E e){
   return (Number)e>(Number)t
}

Дженерики -- это всегда про объекты, а оператор > используется только с примитивами. Так что да, как уже объяснили, сравнивать нужно будет внутри какого-то метода.

Но самое-то главное, T и E -- разные классы, не состоящие в иерархических отношениях. Они в принципе несравнимы.

То есть это не значит, что вы не можете придумать велосипед с квадратными колёсами и граблями вместо руля. Это значит, что где-то в самой задумке зарыта какая-то принципиальная ошибка.

Вы бы поделились, что вам в принципе-то надо. В чём вообще задача состоит?

→ Ссылка
Автор решения: Barmaley

Можно попробовать так:

boolean test(T t,E e){
   return convertToNumber(e) >convertToNumber(t)
}


Number convertToNumber(T t) {
    if (t instanceof Number)
       return (Number )t;
    return Double.valueOf(t.toString());
}
→ Ссылка