akhead Geschrieben 25. März 2009 Geschrieben 25. März 2009 Hallo, man castet doch ein Objekt in ein Long .. mit der Methode Long.parselong oder? Zitieren
akhead Geschrieben 25. März 2009 Autor Geschrieben 25. März 2009 Long.parseLong meint ich natürlich Zitieren
nekokaburi Geschrieben 25. März 2009 Geschrieben 25. März 2009 Nö, casten tut man prinzipiell so Long long = (Long)object; mit der Methode Long.parseLong(); wandelst du es um das sind 2 paar schuhe! Zitieren
VaNaTiC Geschrieben 25. März 2009 Geschrieben 25. März 2009 Long long = (Long)object; Völlig richtig. Das ist ein expliziter type cast. Nur der Nutzungsgrund will sich mir nicht so richtig erschliessen Zitieren
dr.dimitri Geschrieben 25. März 2009 Geschrieben 25. März 2009 Nur der Nutzungsgrund will sich mir nicht so richtig erschliessen Ein Hashtable o.ä. z.B. Dim Zitieren
akhead Geschrieben 26. März 2009 Autor Geschrieben 26. März 2009 Ich will das ein Wert aus einer JList ausgelesen wird und dann in ein Variable des Typs Long gespeichert wird. kopfvo.setAuftrag_nr(Long.parseLong(_listAuftrage.getModel().getElementAt(i))); Zitieren
speedi Geschrieben 26. März 2009 Geschrieben 26. März 2009 (bearbeitet) Da musst du parsen und nicht casten. Ich geh mal davon aus, dass in der JList der Wert als String steht. Ein String hat mit einem Long binär gesehen nichts gemeinsam und ist schon gar nicht das selbe. Casten bedeutet festzulegen, dass ein Objekt zu einem bstimmten Typ gehört. Zum beispiel sind JTable, JTree, JTextField alle irgendwo von JComponent abgeleitet. Deshalb kannst du jedes davon auf JComponent casten und so behandeln als wäre es lediglich ein JComponent. Beim parsen passiert wesentlich mehr. Ein String ist eine reihe von chars. Beim parsen eines Strings zu einem Int, Long, Double oder schlagmichtot, wird aus dem Werten im String eine Zahl !!berechnet!! (GAAANZ DICKER UNTERSCHIED ZUM CASTEN!!). __________________________ NACHTRAG: Welchem Typ gehört das Objekt an, dass dir von _listAuftrage.getModel().getElementAt(i) zurückgegeben wird? Lass dir doch mal _listAuftrage.getModel().getElementAt(i).getClass().getName() ausgeben. Bearbeitet 26. März 2009 von speedi Zitieren
VaNaTiC Geschrieben 26. März 2009 Geschrieben 26. März 2009 Eine kleine Anmerkung vorweg: Solange in geModel().elementAt(x) ein String zurückgeliefert wird indem nur Nummern enthalten sind, dann funktioniert das. OK jetzt was anderes. Da es sich hier um Java handelt, sollten wir ein paar Sachen richtig stellen: Long long = (Long)object; Wie schon gesagt, ist das ein expliziter type cast. Der Compiler lässt das auch zu, allerdings wirft das zur Laufzeit ziemlich sicher eine ClassCastException, denn ich wage zu bezweifeln, dass object in diesem Fall immer vom Typ Long oder einer davon abgeleiteten Klasse ist. Besser ist die Exceptions zu vermeiden wo es geht und prinzipiell mittels instanceof zu testen. long l = (long)object; Geht genauso wenig, da sagt der Compiler schon nee Ein Hashtable o.ä. z.B. Das wäre dann aber falsch, denn daraus wird einfach kein Hash. Daraus wird auch keine Referenz, schon garnicht gesichert als long. Für den Hash eines Objects gibt es int Object.hashCode(), der noch am nächsten zur Referenz eines Objekts steht. Dieser Hash ist im Endeffekt in den Java-Implementierungen genau das, was hexadezimal hinter den Klassennamen beim Object.toString() steht. akhead, Du sagst, da müsste noch toString() rein?! Ich nehme an, es ist das hier gemeint: kopfvo.setAuftrag_nr(Long.parseLong(_listAuftrage.getModel().getElementAt(i).toString())); Wenn dem so ist, dann ist Dir nicht bewusst, dass Long.parseLong() immer einen String als ersten Param verlangt und das der Compiler automatisch zur Laufzeit eine Wandlung von Objekt in String vornimmt und das automatisch mittels Object.toString() macht bzw. der polymorphen Methode. Das toString() bringt also nur der besseren Lesbarkeit halber was. Leider kann ich Dir nicht sagen, was dann per toString() rauskommt. Ob das überhaupt Sinn macht zu als Long zu parsen, denn das ist abhängig vom Inhalt des Listeneintrages. Wie eingangs gesagt, geht das nur, wenn das Strings sind, die nur aus Nummern bestehen. Aber warum dann nicht gleich einen Vector<Long> benutzen?! Zitieren
dr.dimitri Geschrieben 26. März 2009 Geschrieben 26. März 2009 Das wäre dann aber falsch, denn daraus wird einfach kein Hash. Daraus wird auch keine Referenz, schon garnicht gesichert als long. Da hast hast mich falsch verstanden. Wenn ich ein Long Object als Value in einer HT speichere, dann muss ich es, bei einem Aufruf von get(key_value) explizit von Object nach Long casten. Das meinte ich (vergessen wir mal generics). Mittlerweile wissen wir ja, dass der Autor nicht casten, sondern einfach ein neues Objekt anlegen will. Dim Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.