Generic von einer ArrayList/HashMap bekommen

JavaN3rd

Mitglied
Hallo zusammen

Ich habe ein Problem mit einem Generic einer HashMap.
Ich habe eine HashMap<String, Object> die als Symboltabelle eines Parsers dient (variables im Code), also variablen "speichert". Dies können verschiedene Typen sein, deshalb <Object>.
Wenn ich nun ein Integer oder ein Double speichere und dieses später wieder über get aus der Liste hole
kann ich
Java:
.getClass().toString().contains("Integer");
fragen ob es sich um einen Integer bzw. Double usw. handelt und kann dann entsprechend handeln (siehe Code).

Java:
String s = stack.get(stack.size()-1).getClass().toString();
	if(s.contains("Integer") && variables.get(name).getClass().toString().contains("Integer")) variables.put(name, new Integer(stack.get(stack.size()-1).toString()));
	else if(s.contains("Double") && variables.get(name).getClass().toString().contains("Double")) variables.put(name, new Double(stack.get(stack.size()-1).toString()));
	else if(s.contains("Boolean") && variables.get(name).getClass().toString().contains("Boolean")) variables.put(name, new Boolean(stack.get(stack.size()-1).toString()));
	else if(s.contains("String") && variables.get(name).getClass().toString().contains("String")) variables.put(name, stack.get(stack.size()-1).toString());
	else {
		error("ERROR: Couldn't save variable with different type");
	}

stack ist eine ArrayList die als Stack dient (wie der Name schon sagt :D) und verschiedene Objekttypen enthalten kann. (auch <Object> Generic).

Meine erste Frage ist nun:
Weiss jemand eine bessere Lösung um die Typen herauszufinden oder auch um die variablen in die Hashmap zu speichern (vgl.
Java:
 ... new Integer(stack.get(stack.size()-1).toString))
z.B.)

Meine 2. Frage ist:
Wenn ich in die HashMap eine ArrayList mit bestimmtem Generic z.B. Integer speichere wie kann ich dort den Typ (inklusive Generic) abfragen, denn mit .getClass().toString() bekomme ich ja den Generic nicht?

Vielen Dank für jede Hilfe.
 

Otzelot

Mitglied
Ich bin mir irgendwie nicht sicher ob ich dich richtig verstanden habe:
Anstatt:

Java:
String s = stack.get(stack.size()-1).getClass().toString();
könntest du einfach ein Object benutzen.
Java:
Object ob = stack.get(stack.size()-1);
und dann immer abfragen
Java:
if(ob instanceof Integer)....

Aber wieso denn überhaupt immer stack.size()-1 ? Damit kriegst du doch immer nur den letzten Eintrag von stack?
 

JavaN3rd

Mitglied
Vielen Dank

Das mit instanceOf habe ich nicht gekannt.
Java:
stack.get(stack.size()-1)
verwende ich deshalb weil das neuste in meinem Stack immer zuhinterst in der Liste steht, d.h. wenn etwas auf den Stack gepusht wird brauche ich einfach
Java:
stack.add(new Integer(0));
z.B.

Funktioniert das mit instanceOf auch mit Generics?

Ich habe jetzt selbst getestet es funktioniert nicht.
Java:
Object ob = li.get(4);
        if(ob instanceof ArrayList){
            System.out.println("stimmt");
        } else{
            System.out.println("stimmt nicht");
        }
hier gibt es "stimmt" als Output weil li.get(4) eine ArrayList ist, aber wenn ich
Java:
Object ob = li.get(4);
        if(ob instanceof ArrayList<Integer>){
            System.out.println("stimmt");
        } else{
            System.out.println("stimmt nicht");
        }
schreiben möchte (also mit Generic), reklamiert der Compiler.

Hat jemand für das eine Lösung?
 
Zuletzt bearbeitet:
B

bygones

Gast
wie schon gesagt den generischen Typ kannst du nicht abfragen.

Auch sonst halt ich das Konstrukt da fuer mehr als fragwuerdig.

Zum einen warum eine ArrayList fuer einen Stack benutzen ?? Es gibt eine Stack Klasse im JDK (auch wenn eine krude und schlechte klasse), und auch sonst gibts das Dequeue Interface was bei weitem besser ist.

Java:
String s = stack.get(stack.size()-1).getClass().toString();
    if(s.contains("Integer") && variables.get(name).getClass().toString().contains("Integer"))
Stringvergleich bei Klassen und dann mit contains ? argh...
Java:
Class c = stack.get(stack.size()-1).getClass()
if (c.equals(Integer.class)) {
  // integer
}

und insgesammt kommt mir der ganze Ansatz mehr als merkwürdig vor.... was willst du machen ?
 

JavaN3rd

Mitglied
Erst mal Danke für die Hilfe

Ich weiss das es eine Stack-Klasse im JDK gibt. Diese baut aber auf Vector auf und wie ich informiert bin ist das überholt bzw. sollte man besser das Collections Framework und somit ArrayList brauchen.
Für was sollte ich das Dequeue Interface implementieren und eine eigene Klasse schreiben, wenn es auch mit einer ArrayList geht.

Das mit den Vergleichen lassen wir besser ;) ich werde instanceof verwenden.

Das ganze ist Teil eines Parsers, der eine einfache Programmiersprache interpretieren soll.

EDIT:
Wenn man nicht dahinter sieht macht es tatsächlich nicht viel Sinn, aber ich teste so ob der richtige Typ zugewiesen wird. d.h. wenn sowas steht.

Code:
int i;

dann wird eine 0 mit Key i in die HashMap eingetragen, wenn dann die Zuweisung kommt. Also:

Code:
i = 2;

dann frage ich mit dem oberen Code, ob die Zahl 2 wirklich dem i zugewiesen werden darf.
 
Zuletzt bearbeitet:
B

bygones

Gast
Erst mal Danke für die Hilfe

Ich weiss das es eine Stack-Klasse im JDK gibt. Diese baut aber auf Vector auf und wie ich informiert bin ist das überholt bzw. sollte man besser das Collections Framework und somit ArrayList brauchen.
Für was sollte ich das Dequeue Interface implementieren und eine eigene Klasse schreiben, wenn es auch mit einer ArrayList geht.
Vector an sich ist nicht unbedingt überholt - daraus aber zu schliessen nicht die Stack klasse zu nehmen ist auch nicht richtig.

Du sollst auch das Deque Interface nicht implementieren, sondern dessen Implementierungen dir anschauen, da gibt es die Array Implementierung (http://download-llnw.oracle.com/javase/6/docs/api/java/util/ArrayDeque.html) bzw List Implementierung (LinkedList (Java Platform SE 6)).
Vorteil ist hier dass du schon methoden hast auf den Stack zu schieben bzw was zu holen (über push / pop)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
O Werte einer Generic LinkedList zusammenrechenen Allgemeine Java-Themen 14
N Generic Type einer Generischen Klasse während der Laufzeit bekommen Allgemeine Java-Themen 2
byte Generic Type einer List zur Laufzeit rausfinden? Allgemeine Java-Themen 4
Rakshan Generic reading of XML document from the root tag into an Collection Allgemeine Java-Themen 0
B In Java Methode mit generic input und output basteln? Allgemeine Java-Themen 4
S Problem mit Generic bei unmodifiableCollection Allgemeine Java-Themen 4
Neumi5694 Methoden Generic: Rückgabetyp als Class-Parameter übergeben Allgemeine Java-Themen 3
Neumi5694 Datentypen Generic mit parameterlosem Konstructor Allgemeine Java-Themen 4
C Generic collections und static typing Allgemeine Java-Themen 4
K Generic class und Reflection Allgemeine Java-Themen 2
K Saubere Verwendung von Generic Types Allgemeine Java-Themen 7
T Generic Allgemeine Java-Themen 1
C Generic-Funktion nur bei bestimmten Typen erlauben Allgemeine Java-Themen 6
M Cannot create a generic array of T Allgemeine Java-Themen 5
N Generic extends Generic Allgemeine Java-Themen 5
TheWhiteShadow Generic Bug? Allgemeine Java-Themen 19
P Generic zur Laufzeit Allgemeine Java-Themen 4
X Generic muss zwei Klassen/Interfaces erfüllen Allgemeine Java-Themen 5
S Reflection und Generic Allgemeine Java-Themen 9
G Klasse eines Generic Allgemeine Java-Themen 6
G Generic merhfach Angabe Allgemeine Java-Themen 8
Dragonfire Generic Typ zur Laufzeit Allgemeine Java-Themen 9
N Casten durch generic vermeiden ?? Allgemeine Java-Themen 10
N generic reflection Allgemeine Java-Themen 5
thE_29 Generic Methoden die sich aufrufen wollen nicht immer Allgemeine Java-Themen 12
A Generic-Problem. was meint ihr dazu? Allgemeine Java-Themen 4
G unbekanntes Generic Allgemeine Java-Themen 12
K Bound mismatch: The generic method sort(List<T>) of ty Allgemeine Java-Themen 4
V ArrayList ist nicht generic!?? Oder bin ich blöd? Allgemeine Java-Themen 2
G [quote]the type HashMap is not generic; it cannot be paramet Allgemeine Java-Themen 4
C Generic Type ermitteln Allgemeine Java-Themen 3
H References to generic type Test.A<typ> should be param Allgemeine Java-Themen 5
O Text aus einer Textdatei rausholen, der zwischen zwei Schlüsselworten steht Allgemeine Java-Themen 4
V Umgang mit fehlenden Daten in einer Java-Datenanalyseanwendung Allgemeine Java-Themen 5
M Methodenübersicht einer Klasse einsehen Allgemeine Java-Themen 14
T JNA, Aufruf der Funktionen einer dll Allgemeine Java-Themen 5
I Vom Monolith zu Services in einer Webseite Allgemeine Java-Themen 1
W Variable Initialisierung mit dem Ergebnis einer Regex Allgemeine Java-Themen 1
C Sortieren und Selektieren einer ArrayList<Point3D> Allgemeine Java-Themen 6
A Einzelne Objekte und Unterobjekte einer ArrayList ausgeben Allgemeine Java-Themen 53
TheSepp Wie kann man Leerzeichen aus einer Array liste entfernen? Allgemeine Java-Themen 10
B Ein Objekt einer Klasse mehreren anderen Klassen zur Verfügung stellen? Allgemeine Java-Themen 6
M Optimierung einer Methode (byte-Geraffel) Allgemeine Java-Themen 2
I Wie kann ich den Wert aus einer If abfrage ausgeben Allgemeine Java-Themen 23
S HTML einer Webseite 1:1 so bekommen wie es auch der Browser anzeigt? Allgemeine Java-Themen 14
melaniemueller Einzelne Zeile aus einer txt Datei in einem String speichern Allgemeine Java-Themen 12
L Java überprüfen lassen, ob sich ein gegebener Pfad / das Programm an sich auf einer CD oder Festplatte befindet Allgemeine Java-Themen 14
J (Geplante) Änderungen an einer Datei vorübergehend speichern und anwenden? Allgemeine Java-Themen 12
ME2002 Fragen aus einer Java Klausur Allgemeine Java-Themen 67
_user_q Obfuscate einer .jar-Datei mit ProGuard? Allgemeine Java-Themen 2
_user_q Verknüpfung einer .jar-Datei (liegt z. B. auf dem Desktop) im Autostart-Ordner erstellen? Allgemeine Java-Themen 20
C Parsen einer sich updatenden Html mithilfe von jsoup Allgemeine Java-Themen 4
E Eine Methode einer extendeten Klasse deakitivieren Allgemeine Java-Themen 12
H Performance einer Monte-Carlo-Simulation verbessern Allgemeine Java-Themen 6
LimDul Kam eine java.net.URL zu einer HashMap und ging als DNS Anfrage wieder heraus Allgemeine Java-Themen 18
E Variablen Nach Übergabe einer Variable den Constructor aufrufen Allgemeine Java-Themen 16
Zeppi NullPointerException in einer if-Abfrage Allgemeine Java-Themen 6
D Abbruch einer ViewScoped Bean in Arbeit Allgemeine Java-Themen 2
Lukas2904 Schleife mit ansteuerung einer Klasse Allgemeine Java-Themen 5
d.lumpi Aus Einer Klasse auf ein Objekt einer anderen Klasse Zugreifen Allgemeine Java-Themen 1
Lukas2904 Wie kann man cps (ClicksPerSecond) in einer GUI anzeigen lassen? Allgemeine Java-Themen 4
O Produziert das Tool "jpackage" (ab JDK 14) .exe Dateien, die auf einer Zielumgebung ohne JRE lauffähig sind ?` Allgemeine Java-Themen 7
R Lambda Expression in einer Methode execute() aufrufen (execute() ist eine Methode aus dem funktionalen Interface Command) Allgemeine Java-Themen 5
Drachenbauer wie kann ich alle instanzen einer Klasse durchsehen, ohne, dass diese in einer Liste erzeugt wurden? Allgemeine Java-Themen 11
N BlueJ Implementation einer Analoguhr Allgemeine Java-Themen 0
O Formatierte String ausgabe bei vier Variablen in einer Zeile Allgemeine Java-Themen 1
N Speicherort einer Datei im Explorer ändern Allgemeine Java-Themen 8
O Datentypen Wie kann ich den Typ einer ArrayList abfragen ? Allgemeine Java-Themen 7
O Leerzeichen und Umlaute im Pfad einer Java Applikation machen Probleme Allgemeine Java-Themen 13
H Mehrere PNG-Files in einer Datei Allgemeine Java-Themen 9
G Java Editor Löschen doppelter Zahlen einer Liste Allgemeine Java-Themen 2
J JSON Daten von einer Webseite erhalten Allgemeine Java-Themen 2
L RegEx für Teile einer Berechnung Allgemeine Java-Themen 14
L Erste Schritte TDD testen einer Methode mit injezierten Services? Allgemeine Java-Themen 12
J Zerlegen einer Zahl Allgemeine Java-Themen 6
Zrebna Wie kann man endgültig aus einer Rekursion ausbrechen? Allgemeine Java-Themen 14
MiMa Person in einer Arraylist hinzugügen mit Prüfung ? Allgemeine Java-Themen 6
Meeresgott Effizientester Weg um nach der Value einer verschachtelten Map aufzulösen Allgemeine Java-Themen 5
H Mehrere Datentypen in einer Arraylist speichern Allgemeine Java-Themen 9
MiMa Prüfziffer einer EAN Nummer berechnen Allgemeine Java-Themen 4
MiMa Erstellungsdatum einer Datei Allgemeine Java-Themen 10
Drachenbauer Wie kann ich einer existierenden Enum von außerhalb veränderte Werte zuweisen? Allgemeine Java-Themen 5
S HTML den ich von einer URL hole nicht identisch mit dem HTML im Browser Allgemeine Java-Themen 1
S Rückgabe einer HttpURLConnection für eine Seite einlesen bei der man eingeloggt ist..? Allgemeine Java-Themen 5
O Java-Applikation tut in Netbeans, als JAR nicht, wegen Pfadangaben einer benötigten Datei Allgemeine Java-Themen 8
M Hilfe bei einer Java Programmieraufgabe! Ab morgen Montag um 08:00 Uhr Allgemeine Java-Themen 5
J Algorithmen Analyse einer Schleife Allgemeine Java-Themen 6
Drachenbauer Wie finde ich den Aufrufer zu einer Methode, die sich nicht in meinem Projekt befindet? Allgemeine Java-Themen 2
J Die Letzte Zahl aus einer Text datei lesen Allgemeine Java-Themen 8
P einen public <Optinal String> in einer anderen Klasse mit einem Int vergleichen Allgemeine Java-Themen 2
A Mithilfe von einer Nummer einen Namen finden n-Beziehung Allgemeine Java-Themen 8
Scream_ilias Auf einer Website die anmeldedaten eingeben Allgemeine Java-Themen 9
V Threads Probleme beim Aufrufen von Methoden einer anderen Klasse (Threads) Allgemeine Java-Themen 14
I Lohnt sich heutzutage der Aufwand einer Portierung für MacOS Allgemeine Java-Themen 8
J Suchen von einer Scannereingabe in einem HashSet Allgemeine Java-Themen 1
M Konstruktor einer Methode Allgemeine Java-Themen 35
L Echtzeitdaten aus einer Webseite ziehen mit Java Allgemeine Java-Themen 19
V EMail, Attachments auslesen von einer Email Allgemeine Java-Themen 0
T Google Links in einer Liste Allgemeine Java-Themen 4
T Sinn einer toString Methode Allgemeine Java-Themen 3

Ähnliche Java Themen

Neue Themen


Oben