К сожалению, нет способа получить примитивный тип из типа оболочки, не прибегая к блокам if / else.
Проблема в том, что просто невозможно реализовать такой метод в общем виде. Вот несколько, казалось бы, возможных подходов, которые можно ожидать найти в классе Number:
public abstract X getPrimitiveValue();
Это было бы неплохо, не так ли? Но это невозможно. Не существует возможных X, которые могли бы быть абстракцией над int
, float
, double
и т. Д.
public abstract Class<?> getCorrespondingPrimitiveClass();
Это тоже не поможет, потому что нет способа создания экземпляров примитивных классов.
Таким образом, единственное, что вы можете сделать, общее для всех типов, - это использовать методы longValue()
или doubleValue()
, но в любом случае вы теряете информацию, если имеете дело с неправильным типом.
Так что нет: иерархия java просто не подходит для общего решения таких проблем.