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
пробовал все эти методы для преобразования ->
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
}