Umwandlung von Objekt zu Double in Java
Ich versuche viel von ClassCastExceptions in meinem code, die ausgehend von einer einzigen kritischen Punkt. Beginnen werde ich mit der Bereitstellung von Hintergrundinformationen für diese Frage
Bin ich beim Lesen verschiedener Arten von Werten aus einer csv-Datei. Das folgende ist eine Momentaufnahme der Klasse, die hält Sie.
public class Row {
private Object[] data;
public Object getAtIndex(int i)
{
return data[i];
}
}
Holding für die verschiedenen Zeilen einer Datei, ich bin mit einem
ArrayList<Row> rows;
Den problem liegt in einer Funktion, die zurückgeben sollte, ein Double[] mit den Werten einer bestimmten Spalte gespeichert, die in der ArrayList. Meiner aktuellen Funktion sieht wie folgt aus
public Double[] getByIndex(int i)
{
Double[] result = new Double[rows.size()];
String temp;
for(int j=0;j<rows.size();j++)
{
temp =(String)rows.get(j).getAtIndex(i); //java.lang.ClassCastException: java.lang.Double cannot be cast to java.lang.String
result[j]=Double.parseDouble(temp);
}
return result;
}
Diese getByIndex() wirft ClassCastExceptions, wenn Sie aufgerufen. Ich werde sicherstellen, dass ich diese Funktion aufrufen nur für diejenigen Spalten, die zu erwarten sind Double-Werte.
Gibt es eine andere Möglichkeit zur Erleichterung dieses Objekts zu Double-conversion. Mein Fortschritt ist ins stocken geraten, weil dieses problem.
Bitte helfen Sie.
Vielen Dank an alle! Besonderen Dank an @Wesir für einen KUSS-konforme Lösung 🙂 ich wusste nie, Antworten auf StackOverflow sind so schnell. Macht mich wollen, aktiv zu sein in so einer lebendigen Gemeinschaft. You guys rock!
InformationsquelleAutor The Mitra Boy | 2012-06-04
Du musst angemeldet sein, um einen Kommentar abzugeben.
Statt
verwenden Sie einfach die folgende:
InformationsquelleAutor Hakan Serce
Etwas mehr bulletproof würde ich kombinieren die Antworten von esej und Wesir... (aber nur, wenn dies nicht ein performance-Flaschenhals!)
Wenn dies der performance-Engpass der Anwendung dann mit allen Mitteln gehen mit dem, was Wesir sagte 🙂
Ja, Gus einen Tippfehler gemacht (entfernen Sie die voll "(String)" von der ersten Zeile). Ansonsten mag ich seine/Ihre Antwort, denn es enthält eine try-catch. Die richtige Lösung wird wohl irgendwo in deinem code (wo Sie füllen Sie die Zeile class - und Neudefinition, die Klasse einige, es ist irgendwie seltsam, füllen Sie es vollständig typisierte imho.)
behoben 🙂 vielen Dank!
InformationsquelleAutor Gus
Versuchen:
Oder: (Wenn Ihr Zeilen enthält nur Verdoppeln, aber dann sollten Sie vielleicht erklären.)
Sind Sie excplicitly Gießen Sie etwas in eine Zeichenfolge, wenn Sie, dass etwas nicht in einen String-cast schlägt fehl (String ist final in Java). Der Schlüssel für die richtige Sache ist, was Sie in den Zeilen, ist es nur Verdoppelt?
InformationsquelleAutor esej
Gibt es eine Reihe von Problemen mit, was Sie versuchen.
Erster Linie, die Sie nicht benötigen, sollten eine temporäre Zeichenfolge, um zu erhalten, zu Verdoppeln. Basta code smell, der anzeigt, dass etwas schief gegangen ist.
Von den blicken der Dinge, die Sie sollten in der Lage sein zu tun, dass die Stimmen direkt:
Dies ist der Vorschlag, den @Wesir gemacht
Zweitens, wenn Sie hat wollen, um einen string aus irgendeinem Objekt, das kein string ist, solltest du entweder
Object.toString()
oderString.valueOf
. Einfach Gießen Sie einen Wert in der Hoffnung, dass es ein string ist fast nie eine gute Idee (es sei denn, Sie sind sicher, dass es ein String sein). In Sie Fall, Sie erwarten sind Verdoppelt, soString.valueOf(Double)
funktionieren würde.InformationsquelleAutor Tim Pote