Casting variabel gestalten.

Status
Nicht offen für weitere Antworten.

Biesterfeld

Aktives Mitglied
Hej Board,

zunächst etwas code

Code:
private TreeSet getFinalTreeSet(HashMap hm){
   
   TreeSet ts = new TreeSet();
   Iterator it = hm.values().iterator();
   while(it.hasNext())
      ts.add((FooBar)it.next());      
   return ts;
}

Diese Funktion soll mir die Values aus HashMaps in TreeSets füllen und verwertbar bleiben, da ich sie öfter brauche.

Das Problem liegt in Zeile 6. Einmal rufe ich die Methode z.B. mit HashMaps deren Values vom Typ String und einmal vom Typ int sind auf, möchte aber das die TreeSets direkt die richtigen Typen aufnehmen und eben nicht vom Typ HashMap$Value gefüllt werden.
Beim Methodenaufruf kenne ich den Typ der Values. Wie kann ich nun das Casting variabel halten?

BTW: Kann ich das extrahieren von Values aus HashMaps in neue Collections auch schlanker gestalten als den Weg über einen Iterator zu gehen? Also ähnlich wie zumBeispiel getKeys() direkt ein Set zurückgibt?

Habt schonmal besten Dank.
Biesterfeld.
 

mic_checker

Top Contributor
Du fügst also sowohl Integer als auch String Objekte ein - willst sie wieder rausholen und weisst natürlich jetzt nicht ob das rausgeholte ein Integer oder ein String ist...

Schau dir mal "instance of" an. Also hol das Object raus und überprüf dann mit instance of ob es ein String war etc.

Also in etwa so:

Code:
// o dein Object
if(o instanceof String) {
//String
} else if(o instanceof Integer) {
//Integer
}
 

Biesterfeld

Aktives Mitglied
Hej,

schonmal danke für die schnellen Antworten, aber ich denke meine Frage war nicht klar gestellt:

@Bleiglanz
Ich möchte in den TreeSet direkt die richtig gecasteten Values einfügen. Daher fällt schonmal
Code:
ts.addAll(hm.values())
aus, da die Elemente sonst vom Typ HashMap$Value sind oder vertue ich mich da?

@mic_checker
Das mit den Strings / ints war nur ein Beispiel. Wenn es geht (wenn nicht mach ichs sowieso ganz anderes), will ich das Casting selber variabel gestalten. Also so, dass der Methode wirklich egal ist womit die HashMap gefüllt ist und sie es selber erkennt und eben richtig gecastet in den TreeSet füllt.

Also dass ich den Ausdruck
Code:
ts.add((FooBar)it.next());
durch
Code:
String klassenName = "FooBar"
ts.add((Class.forName(klassenName))it.next());
ersetzen könnte.

Letzeres Beispiel geht übrigens nicht. Aber sowas suche ich.

Schon mal danke und
Beste Grüße
Biesterfeld
 

Bleiglanz

Gesperrter Benutzer
aus, da die Elemente sonst vom Typ HashMap$Value sind oder vertue ich mich da?
ja, und zwar total


@Bleiglanz
Ich möchte in den TreeSet direkt die richtig gecasteten Values einfügen.

Offensichtlich verwendest du keine Generics
=> dein TreeSet alle Objektreferenzen auf

wozu um Himmels willen willst du die Objekte "casten", bevor du sie in das TreeSet legst? So ein cast bewirkt überhaupt NICHTS in Java

add(it.next())

hat genau den gleichen Effekt wie

add((Pippipoppo) it.next())

ausser dass der zwiete Befehl eine Class-Cast-Exception werfen kann

wenn du ALLE values übernehmen willst, verwende addAll(); wenn nicht dann iteriere und entscheide mit instanceof welche du nimmst...
 

Biesterfeld

Aktives Mitglied
Hej Bleiglanz,

Offensichtlich verwendest du keine Generics
=> dein TreeSet alle Objektreferenzen auf
Is richtig. Und zwar bin ich bei dem Projekt gebeten worden aus Kompatibilitätsgründen auf den Tiger zu verzichten. Da Performance für meine Aufgabe aber ein sehr großes Problem darstellt, würde ich gerne mal wissen, ob ich durch den Verzicht von Generics in irgendeiner weise Einbußen in Kauf nehme?

wozu um Himmels willen willst du die Objekte "casten", bevor du sie in das TreeSet legst? So ein cast bewirkt überhaupt NICHTS in Java
Also ich bin ja Anfänger, daher würd ich das gerne verstehen. Wenn ich Objekte in Collections hin und her schubse werden sie immer automatisch vom Typ Object behandelt?

Dank dir schonmal
Beste Grüße
Biesterfeld
 

Wildcard

Top Contributor
Biesterfeld hat gesagt.:
Also ich bin ja Anfänger, daher würd ich das gerne verstehen. Wenn ich Objekte in Collections hin und her schubse werden sie immer automatisch vom Typ Object behandelt?
Ohne Generics? Ja!
Egal was du in eine Collection reintust, wenn es wieder rauskommt ist es erstmal ein Object.
 

Biesterfeld

Aktives Mitglied
Hej nochmal,

vielen dank für die erklärenden Worte. Is klar geworden. Allerdings ist mir - auch wenn das Problem nicht mehr besteht - aufgefallen, dass meine Initiale Frage noch nicht beantwortet wurde und das würde mich nun doch interessieren:

Kann ich einen "Caster" variabel behandeln oder nicht? Da es sich beim Cast um einen Operator handelt befürchte ich ja fast, dass der Sprachumfang von Java das nicht vorsieht (zumindest nicht bis 1.4) . Gehe ich recht der Annahme?

Habts gut
Bietsrfeld
 

Bleiglanz

Gesperrter Benutzer
ja, sowas gibt es nicht

hätte auch keinen Sinn, weil die linke seite
Code:
    variable = ....
einen festen Typ hat (und also nur kompatible Typen aufnehmen kann)
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
C Casting Java Basics - Anfänger-Themen 8
F Interface Casting Java Basics - Anfänger-Themen 13
N Generics und Casting eines Objekts Java Basics - Anfänger-Themen 1
temi (Down-)Casting Problem Java Basics - Anfänger-Themen 5
X Datentypen Casting?! Java Basics - Anfänger-Themen 7
P Casting Warning bei Iterator Java Basics - Anfänger-Themen 32
H Datentypen Casting objects Java Basics - Anfänger-Themen 29
S Class Casting Allgemein Java Basics - Anfänger-Themen 3
Unsympath OOP Up- und Down-Casting Java Basics - Anfänger-Themen 3
R Casting Problem Java Basics - Anfänger-Themen 15
D Arry Casting Java Basics - Anfänger-Themen 30
B Anfängerprobleme (Casting,...) Java Basics - Anfänger-Themen 5
W Generische Klassen und Casting Java Basics - Anfänger-Themen 6
D OOP casting/get & set Methoden Java Basics - Anfänger-Themen 7
J Type-Casting Java Basics - Anfänger-Themen 8
G Überschreiben von Methoden beim Casting Java Basics - Anfänger-Themen 7
T Casting von Objekten Java Basics - Anfänger-Themen 2
G Casting, Ordinalzahl eines Buchstabens? Java Basics - Anfänger-Themen 4
P Casting von Object zu (String || Integer) Java Basics - Anfänger-Themen 8
U casting: ArrayList to String[] Java Basics - Anfänger-Themen 10
B Methoden Übergebe Variabel funktioniert nicht Java Basics - Anfänger-Themen 17
B Variablen Int Variabel in JTextField ändern Java Basics - Anfänger-Themen 2
N Variabel in eine class mit "extends JLabel" übertragen Java Basics - Anfänger-Themen 2
T Ich habe eine Variabel die nicht Methoden übergreifend ist. Kann mir jemand Helfen :) Java Basics - Anfänger-Themen 5
S Objekt-Attribute "variabel" gestalten Java Basics - Anfänger-Themen 10
C Methoden Methode Variabel aufrufen Java Basics - Anfänger-Themen 2
O array mit Methode variabel befüllen Java Basics - Anfänger-Themen 5
Tacofan Variabel in einer anderen Methode Java Basics - Anfänger-Themen 2
S Binärer Suchbaum - Size als Variabel in innerer Klasse speichern Java Basics - Anfänger-Themen 2
M Name der Komponete/Variabel/Methode Java Basics - Anfänger-Themen 5
M Enum-Variabel-Abfrage funktioniert nicht? Java Basics - Anfänger-Themen 2
S Suche richtigen Typ für Variabel mit den Werten (neu, gebraucht, beschädigt) Java Basics - Anfänger-Themen 7
V kann ich eine TextProperty an eine booloan variabel binden ? Java Basics - Anfänger-Themen 2
G Variabel: Nach String benannte Methode ausführen Java Basics - Anfänger-Themen 13
M Konstruktor Problem - Variabel Erhöhen Java Basics - Anfänger-Themen 5
N Methoden Decimalformat variabel einstellen Java Basics - Anfänger-Themen 18
G Array nimmt Variabel nicht an Java Basics - Anfänger-Themen 14
K variabel.equal("text") verneinen Java Basics - Anfänger-Themen 2
V GridLayout - Spaltenbreite variabel ? Java Basics - Anfänger-Themen 5
M Objektnamen Variabel vergeben Java Basics - Anfänger-Themen 7
T Auf Variabel in einer anderen Methode zugreifen Java Basics - Anfänger-Themen 4
T File Variabel Java Basics - Anfänger-Themen 8
G Was zum Teufel ist denn so ein Ausdruck"variabel : vari Java Basics - Anfänger-Themen 8
A Variabel int a; int b; ? Java Basics - Anfänger-Themen 8
T Variabel großes String-Array in ein String speichern Java Basics - Anfänger-Themen 3
L Array mit Wörtern gestalten Java Basics - Anfänger-Themen 2
T Programm effizienter gestalten Java Basics - Anfänger-Themen 17
J Verundung dynamisch gestalten Java Basics - Anfänger-Themen 21
S Kann man in Java folgendes iwie kürzer und übersichtlicher gestalten? Java Basics - Anfänger-Themen 3
J Applet farblich gestalten Java Basics - Anfänger-Themen 5
U JPanel dynamisch gestalten Java Basics - Anfänger-Themen 7
K Datentypen Full qualified Name dynamisch gestalten Java Basics - Anfänger-Themen 7
J Array gestalten Java Basics - Anfänger-Themen 2
T Teil eines Strings farbig gestalten Java Basics - Anfänger-Themen 10
J MySQL Timestamp "lesbarer" gestalten Java Basics - Anfänger-Themen 6
G Pfad dynamisch gestalten. Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben