Тут вот был аналогичный вопрос, по мотивам его вспомнилось.
У нас была задача - интерпретатор скриптового языка на java, вопрос фигня, но типы если целые то и должны оставаться целыми, с другой стороны неявное преобразование типов. Ну и использовать везде Long вместо целых нельзя.
Сделано было так:
// создавалась пачка "операторов"
// для каждого поддерживаемого типа:
mathOp(Integer l, Number r);
mathOp(Long l, Number r);
mathOp(Float l, Number r);
mathOp(Double l, Number r);
для упрощения правый аргумент приводится к типу левого, костыльно да.
Так вот вопрос, можно ли решить сию задачу элегантнее?