Как привести дженерик к Number?
При сравнении 2х дженерик типов нужно сделать что-то типа
boolean test(T t,E e){
return (Number)e>(Number)t
}
Как это можно реализовать? Джава позволяет приводить дженерики к Integer & Double , но к Number почему-то нельзя
Ответы (3 шт):
Потому что abstract class Number и объекты которые вы используете должны
- Быть потомками Number.
- 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 -- разные классы, не состоящие в иерархических отношениях. Они в принципе несравнимы.
То есть это не значит, что вы не можете придумать велосипед с квадратными колёсами и граблями вместо руля. Это значит, что где-то в самой задумке зарыта какая-то принципиальная ошибка.
Вы бы поделились, что вам в принципе-то надо. В чём вообще задача состоит?
Можно попробовать так:
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());
}