Zum Inhalt springen

Object in ein Long casten


Empfohlene Beiträge

Geschrieben

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)));

Geschrieben (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 von speedi
Geschrieben

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 :D
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?!

Geschrieben
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

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...