Java правильный способ преобразования / приведения объекта в Double

Я пытаюсь найти, но все кажется расплывчатым. Мне нужно преобразовать объект o в Double. Правильно ли сначала преобразовать в String? Спасибо.

7 ответов


вы не можете бросить объект в Double Если объект не является двойной.

Проверьте API.

особое внимание

valueOf(double d);

и

valueOf(String s);

эти методы дают вам способ получения Double экземпляр из строки или двойным примитивно. (Также не конструкторы; прочитайте документацию, чтобы увидеть, как они работают) объект, который вы пытаетесь преобразовать, естественно, должен дать вам что-то это можно превратить в дубль.

наконец, имейте в виду, что Double экземпляры неизменяемы - после создания вы не можете их изменить.


new Double(object.toString());

но мне кажется странным, что вы переходите от объекта к двойнику. Вы должны иметь лучшее представление о том, с какого класса объекта вы начинаете, прежде чем пытаться преобразовать. У вас может быть небольшая проблема с качеством кода.

обратите внимание, что это преобразование, а не литья.


вы можете использовать оператор instanceof для проверки, чтобы увидеть, является ли он двойным перед литьем. Затем вы можете смело бросить его в дубль. Кроме того, вы можете протестировать его против других известных типов (например, Integer), а затем принудить их к двойному вручную, если это необходимо.

    Double d = null;
    if (obj instanceof Double) {
        d = (Double) obj;
    }

Если ваш объект представляет число, например, целое число, вы можете привести его к числу, а затем вызвать метод doubleValue ().

Double asDouble(Object o) {
    Double val = null;
    if (o instanceof Number) {
        val = ((Number) o).doubleValue();
    }
    return val;
}



Также стоит упомянуть - если вы были вынуждены использовать более старую версию Java до 1.5, и вы пытаетесь использовать коллекции, вы не сможете параметризовать коллекцию с таким типом, как Double.

Вам придется вручную "box" класса Double при добавлении новых элементов, и "распаковать " первобытному double путем разбора и литья, делать что-то вроде этого:

LinkedList lameOldList = new LinkedList();
lameOldList.add( new Double(1.2) );
lameOldList.add( new Double(3.4) );
lameOldList.add( new Double(5.6) );

double total = 0.0;
for (int i = 0, len = lameOldList.size(); i < len; i++) {
  total += Double.valueOf( (Double)lameOldList.get(i) );
}


Этот список старой школы будет содержать только тип Object и поэтому должен быть брошен в Double.

Кроме того, вы не сможете перебирать список с расширенным циклом в ранних версиях Java-только с циклом for.


в версии Java до 1.7 вы не можете привести объект к примитивному типу

double d = (double) obj;

Вы можете бросить объект на двойной просто отлично

Double d = (Double) obj;

остерегайтесь, он может бросить ClassCastException если ваш объект не является Double


пробовал все эти методы для преобразования ->

obj2Double

    public static void main(String[] args) {

    Object myObj = 10.101;
    System.out.println("Cast to Double: "+((Double)myObj)+10.99);   //concates

    Double d1 = new Double(myObj.toString());
    System.out.println("new Object String - Cast to Double: "+(d1+10.99));  //works

    double d3 = (double) myObj;
    System.out.println("new Object - Cast to Double: "+(d3+10.99));     //works

    double d4 = Double.valueOf((Double)myObj);
    System.out.println("Double.valueOf(): "+(d4+10.99));        //works

    double d5 = ((Number) myObj).doubleValue();
    System.out.println("Cast to Number and call doubleValue(): "+(d5+10.99));       //works

    double d2= Double.parseDouble((String) myObj);
    System.out.println("Cast to String to cast to Double: "+(d2+10));       //works
}