Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Object in ein Long casten

Empfohlene Antworten

Nö, casten tut man prinzipiell so

Long long = (Long)object;

mit der Methode Long.parseLong(); wandelst du es um ;) das sind 2 paar schuhe!

  • Autor

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

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

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

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

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.