Я хочу сделать это: sum += castObjectToNumber(value) и castObjectToNumber должны выглядеть примерно так:

private Number castObjectToNumber(Object value) {
    if(value instanceof Integer) {
        return (int)value;
    } else if(value instanceof Float) {
        return (float) value;
    } else if(value instanceof Double) {
        return (double) value;
    } else if(value instanceof Long) {
        return (long) value;
    } else if(value instanceof Byte) {
        return (byte) value;
    } else if(value instanceof Short) {
        return (short) value;
    }
}

Я не могу изменить это, я получаю значение типа Object, и я хочу, чтобы это было решением общего назначения. Моя проблема здесь в том, что если я возвращаю объект Number, так как это единственное, что объединяет все эти типы, я не могу использовать с ним оператор +=. Так как мне сделать это на Java? Я думаю, что я выбрал неправильный тип возврата, и поэтому он не будет работать, но я не уверен, что это правильный.

0
CodeShark 28 Май 2017 в 00:35

2 ответа

Лучший ответ

Ваша переменная sum имеет предопределенный тип, скорее всего, double, потому что double является «самым большим» из этих типов. Следовательно, вы можете смело конвертировать все типы чисел в двойные. В этом примере предполагается, что ваш объект может быть приведен к Number.

Number number = (Number) obj;
sum += number.doubleValue();
1
3141 27 Май 2017 в 21:45

Поскольку в java нет прямого способа переопределить арифметические операторы - рекомендуется просто добавить 2 метода в свой класс Number: add (Number n), sub (Number n) для выполнения необходимых арифметических операций.

0
Sahar Weissman 27 Май 2017 в 21:40