aus hashmap klassen instanzieren

Status
Nicht offen für weitere Antworten.
G

gast

Gast
hi,

ich hab folgendes problem:

ich möchte aus einer hashmap den key als name einer klasseninstanz verwenden verwenden

public static void setUpNodes(HashMap<String,String> h){

Iterator itr = h.entrySet().iterator();
Object className;
String classType;
while (itr.hasNext()){
Map.Entry entry = (Map.Entry)itr.next();
className = (Object) entry.getKey();
classType = (String) entry.getValue();

Class<?> className = Class.forName(classType);
}
}

beim className steh ich an - egal welcher typ className ist (also string, object,...) - nichts funktioniert. ist className ein string dann meint eclipse dopppelter lokaler variablendeklaration...

danke für hilfe im voraus!

greetz, alex.
 
G

Guest

Gast
sorry - jez mit besserer darstellung

Code:
public static void setUpNodes(HashMap<String,String> h){

Iterator itr = h.entrySet().iterator();
Object className;
String classType;
while (itr.hasNext()){
Map.Entry entry = (Map.Entry)itr.next();
className = (Object) entry.getKey();
classType = (String) entry.getValue();

Class<?> className = Class.forName(classType);
}
}
 
S

SlaterB

Gast
du hast doch schon

> Object className;

dann kannst du keine andere Variable auch noch className nennen
 
G

Guest

Gast
1. danke für die schnelle antwort.

nur leider genau eben ist das problem.

eclipse meint "duplicate local variable className" und meint damit die className variable - also wie ma sieht ich möcht in die className variable den späteren namen der instanz reinschicken (nachdem classForName-aufruf). nur da stoss ich an



???:L
 
G

Guest

Gast
also in der hashmap steht z.b.

<server,irgendwas>

die spätere instanz soll server heissn - also: class server - wie bekomm ich den server in

Code:
Class<?> className = Class.forName(classType);   -- className soll server sein - also der herausgelesene key von der map
 
S

SlaterB

Gast
schreibe
className = Class.forName(classType);
statt
Class<?> className = Class.forName(classType);
 
G

Guest

Gast
:D

merci beaucoup!!!!

danke recht herzlich. siehst so einfach kann die java welt sein - ich hab da mind. 2 stunden herumprobiert :autsch:

lg. alex.
 
S

skywalker

Gast
der hut brennt wieder mal :

...also wenn ich dann in weiterer folge

Code:
            className  =  Class.forName(classType);
            Object oServer = className.getClass().getConstructor(Integer.TYPE).newInstance(5);

versuche mir ein object zu erzeugen (mit constructor dem eine int 5 übergeben wird)
gibts folgende fehlermeldung :autsch:

Code:
java.lang.NoSuchMethodException: java.lang.Class.<init>(int)
	at java.lang.Class.getConstructor0(Unknown Source)
	at java.lang.Class.getConstructor(Unknown Source)
	at XXXX.core.ReadConfigurationXML$NetworkConfiguration.setUpNodes(ReadConfigurationXML.java:120)
	at XXXX.core.ReadConfigurationXML.main(ReadConfigurationXML.java:79)

und wenn ich mir in noch weiterer folge eine methode aus der serverklasse holen möchte kommt eine ähnliche fehlermeldung.
Code:
Method mServerConnect = className.getClass().getMethod("connect",Connector.class);
bin mehr als ratlos - also den fehler vermut ich schon beim className.getClass.getIrgendwas() - nur was da jez wirklich stehn soll?

???:L :?
 
S

SlaterB

Gast
hier steht wie man mit Konstrutoren umgeht, was newInstance für Parameter braucht,
http://java.sun.com/javase/6/docs/api/java/lang/reflect/Constructor.html
ohne solche Kenntnisse gehts nicht, alternativ bei google Tutorials zu Reflection suchen

obwohl, wenn man s genau nimmt, dann funktioniert ja sogar dein Aufruf, es fehlt nur ein passender Konstruktor, da musst du schon die entsprechende Klasse auch posten

> getMethod("connect",Connector.class);

sollte augenscheinlich funktionieren, was ist denn da die genaue Fehlermeldung?
 

skywalker

Aktives Mitglied
hi,

danke wiedamal für die schnelle antwort.

yeep - googelt und gesonnt hab ich mich e schon - nur leider macht mich das nicht schlauer - und das wiedamal seit längerem - wenn ma allein draufkommt is e viel schöner - nur mit der zeit nervt die suche - oder sehe ich wieder mal vor lauter bäume den wald net :?

diesen konstruktor sollte er aufrufen.

Code:
  public SimpleBroadcastServer(int seconds) {
    timer = new Timer();
    timer.schedule( new BroadcastTask(),
                     1000,            
                     seconds * 1000);       
}

das ist die connect methode

Code:
  public void connect(Connector connector) {
      connectorList.add(connector);
  }

fehlermeldung:
Code:
java.lang.NoSuchMethodException: java.lang.Class.connect(org.trade.tsframework.core.Connector)
	at java.lang.Class.getMethod(Unknown Source)
	at org.trade.tsframework.core.ReadConfigurationXML$NetworkConfiguration.setUpNodes(ReadConfigurationXML.java:121)
	at org.trade.tsframework.core.ReadConfigurationXML.main(ReadConfigurationXML.java:79)

mmh.... keine ahnung whats happen. weiss nur dass aller anfang nicht leicht ist ;)
 
B

Beni

Gast
Die Methode "getClass" liefert die Klasse des Objektes, auf dem du das aufrufst. In diesem Fall...
Code:
            className  =  Class.forName(classType);
            Object oServer = className.getClass().getConstructor(Integer.TYPE).newInstance(5);
... die Klasse von "className", welche aber nicht "classType" ist, sondern "java.lang.Class".

Lass das "getClass" einfach mal weg:
Code:
            className  =  Class.forName(classType);
            Object oServer = className.getConstructor(Integer.TYPE).newInstance(5);
 

skywalker

Aktives Mitglied
a ha. da komm ich ja dem stein der weisen ein wenig näher ;)

yeep - es scheint das problem gewesen zu sein - ich habe anstatt zu casten mit getClass() versucht und versucht...

mit dem cast ist das prob mal prob gewesen:

Code:
            className  =  Class.forName(classType);
            Object oServer = ((Class) className).getConstructor(Integer.TYPE).newInstance(5);    
            Method mServerConnect = ((Class) className).getMethod("connect",Connector.class);

big thanx!!! :applaus:

lg, alex.


ps.: so anfängerfehler sind echt hölle :autsch:
 

Murray

Top Contributor
Wieso denn der Cast? className sollte doch jetzt (s. Slaters Post vom 26.11., 18:32) bereits vom Typ Class sein (vielleicht solltest Du auch noch mal über die Namensgebung nachdenken; bei className denkt man wohl eher an einen String als an ein Class-Objekt).
 
S

SlaterB

Gast
nun ja, ich habe in meinem Posting ja vorgeschlagen, das Class<?> wegzunehmen weil die Variable schon definiert ist,
und das, wie weiter oben zu sehen, als Object ;)

da ist der Cast schon nötig, oder besser natürlich: den Typ der Variablen ändern!
 
G

Guest

Gast
Stimmt, da habe ich Deinen Post nicht richtig gelesen. Angesichts der Tatsache, dass className als Object aber nie gebraucht wird (es wird zwar einmal der Key des Entries zugewiesen, aber damit passiert dann nichts weiter), würde ich aber doch empfehlen, den Typ (und auch den Namen) zu ändern.
 

skywalker

Aktives Mitglied
... ich komm da leider immer noch nicht weiter.

ich möchte aus einem xml-file dynamisch objekte erzeugen wo ich eben aus dem xml-file wo z.b. server01 steht ein objekt erzeugen will das den namen server01 trägt

statisch gehts ja wenn ich das (also in dem fall "server" hart rein code ohne probleme:
z.B. für die server classe
Code:
    Class<?> server = Class.forName("org.trade.tsframework.core.SimpleBroadcastServer");
    Object oServer = server.getConstructor(Integer.TYPE).newInstance(5);    
    Method mServerConnect = server.getMethod("connect",Connector.class);
nur mein problem ist leider noch immer das das dynamisch mit der namesgebung für das objekt nicht funktioniert...

hier mal die der ganze code:

Code:
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

 static class NetworkConfiguration  {
    
    @SuppressWarnings("unchecked")
    public static void getHashMap(HashMap<String,String> h){
      
      Iterator itr = h.entrySet().iterator();
      
      while (itr.hasNext()){         
         Map.Entry entry = (Map.Entry)itr.next();
         System.out.println(entry.getKey() + " --> " + entry.getValue());         
      } 
    }
    @SuppressWarnings("unchecked")
    public static void setUpNodes(HashMap<String,String> h) 
                                                  throws ClassNotFoundException{
     
      Iterator itr = h.entrySet().iterator();
      String nameOfClass;
      String classType;
      Object className;
      
      while (itr.hasNext()){         
        Map.Entry entry = (Map.Entry)itr.next();
        nameOfClass =  (String) entry.getKey();
        classType = (String) entry.getValue();
        className = nameOfClass.toString();
 
        if(classType.equals("org.trade.tsframework.core.SimpleBroadcastServer")){
          
            className  =  Class.forName(classType);
            try {
              Object oServer = ((Class) className).
                                getConstructor(Integer.TYPE).newInstance(5);
            } catch (IllegalArgumentException e) {
              // TODO Auto-generated catch block
              e.printStackTrace();
            } catch (SecurityException e) {
              // TODO Auto-generated catch block
              e.printStackTrace();
            } catch (InstantiationException e) {
              // TODO Auto-generated catch block
              e.printStackTrace();
            } catch (IllegalAccessException e) {
              // TODO Auto-generated catch block
              e.printStackTrace();
            } catch (NoSuchMethodException e) {
              // TODO Auto-generated catch block
              e.printStackTrace();
            }   
      if(classType.equals("org.trade.tsframework.core.Connector")){
      
        className  =  Class.forName(classType);
        try {
          Object oConnector = ((Class) className).newInstance();
        } catch (IllegalArgumentException e) {
          // TODO Auto-generated catch block
          e.printStackTrace();
        } catch (SecurityException e) {
          // TODO Auto-generated catch block
          e.printStackTrace();
        } catch (InstantiationException e) {
          // TODO Auto-generated catch block
          e.printStackTrace();
        } catch (IllegalAccessException e) {
          // TODO Auto-generated catch block
          e.printStackTrace();
        } 
 //     Method mServerConnect = ((Class) className).getMethod("connect",Connector.class);
        System.out.println(className + "  " + classType);         
        } 
    }
    }
  }
}


:autsch: und
???:L
 
S

SlaterB

Gast
skywalker hat gesagt.:
aus dem xml-file wo z.b. server01 steht ein objekt erzeugen will das den namen server01 trägt
was ist der 'Name eines Objectes'? kenne ich nicht,
gehts um den Klassename bei Reflection?
gehts um
object.setName(String);
?

------

dann schreibst du Code + 'geht nicht',
was soll man dazu nun sagen?

WAS geht nicht?
Compilerfehler, Exception zur Laufzeit, welches sonstige Fehlverhalten?
bei welcher Eingabe, welchem erwarteten und welcher tatsächlicher Ausgabe?

???

--------

10x
> // TODO Auto-generated catch block

zu schreiben ist ja auch nicht gerade eine Freude für den Leser,
ist es bei einem wochenlangen Problem wirklich zu schwer, die 30 Sekunden zu investieren, um diese Ausgaben herauszulöschen?
von einem gemeinsam catch(Exception e) für alle Exceptions oder gar einem noch kürzeren 'throws Exception' ganz zu schweigen
 

skywalker

Aktives Mitglied
hi,

danke für die rasche reaktion :) und sorry für die schlechte formulierung meiner frage.

und vor allem - sorry - ich glaub ich hab grad einen ganz schrägen denkfehler gehabt

:oops:

ich erwartete mir in der testausgabe ganz am schluss eine ausgabe wie

"server01 org.trade.tsframework.core.SimpleBroadcastServer"

und nicht

"class org.trade.tsframework.core.SimpleBroadcastServer org.trade.tsframework.core.SimpleBroadcastServer"

aaaaaaaaaaaaaaaahhhhhhhhhhhhh.

sehr schweres :autsch:

sorry und danke nochmal!!!

lg, alex.


ich schau ma jez an film an - ist glaub ich besser für heut ;)
 
S

SlaterB

Gast
Wunschvorstellungen sind zwar konkreter, führen aber auch nicht wirklich zur Lösung bzw erfordern nun andere Nachfragen:
niemand weiß, was 'server01' ist, mit der Sache zu tun hat, wo es im Programm steht usw.

dass es irgendwo in irgendeinem XML auftaucht reicht nicht,

wenn du es dagegen in der Methode in einer Variablen verfügbar hast, dann ist es leicht:
System.out.println(variableDieServer01Enthält+" " +rest);

-----
und falls du es dir für meine zahlreichen Kritiken merken magst:
'sorry' bringt auch niemanden weiter oder zumindest reicht eines ;)
einfach danach genauer formulieren und schon gehts weiterals wäre nix
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
S In einer Hashmap Klassen regestrieren Java Basics - Anfänger-Themen 2
S HashMap mehrere Keys zu einem Value Java Basics - Anfänger-Themen 3
A Daten aus einer HashMap aus einer DB speichern und mit neuen Werten vergleichen Java Basics - Anfänger-Themen 8
T HashMap Lsite gibt die sachen nicht aus wie gewollt. Java Basics - Anfänger-Themen 3
krgewb HashMap Java Basics - Anfänger-Themen 2
B Hashmap richtig bauen, die Tripel auf Zahl abbildet? Java Basics - Anfänger-Themen 10
"java.util.HashMap.get(Object)" is null Java Basics - Anfänger-Themen 10
berserkerdq2 Hashmap, wie prüfe ich ob ein Key schon existiert Java Basics - Anfänger-Themen 19
S Durch HashMap iterieren Java Basics - Anfänger-Themen 8
rafi072001 Sortieren einer HashMap nach Values Java Basics - Anfänger-Themen 2
F gson mit einer Hashmap Java Basics - Anfänger-Themen 2
J JSON-HashMap Java Basics - Anfänger-Themen 3
J Hashmap Java Basics - Anfänger-Themen 13
C Hashmap zickt Java Basics - Anfänger-Themen 9
S HashMap contains() Methode Java Basics - Anfänger-Themen 1
Z Satz aufteilen und die Wörter zählen (HashMap) Java Basics - Anfänger-Themen 15
N enum Attribut von Objekten einer Hashmap ausgeben Java Basics - Anfänger-Themen 6
P Verschachtelte Hashmap Java Basics - Anfänger-Themen 6
I Sortiert eine HashMap nicht gleich wie eine ArrayList? Java Basics - Anfänger-Themen 1
B HashMap alphabetisch sortieren Java Basics - Anfänger-Themen 2
J HashMap Java Basics - Anfänger-Themen 6
M Enum-Variable HashMap zuweisen Java Basics - Anfänger-Themen 5
U Hashmap Iterator selbst implementieren Java Basics - Anfänger-Themen 10
N HashMap in List good practice? Java Basics - Anfänger-Themen 2
K Value eines HashMaps in einer HashMap wiedergeben. Java Basics - Anfänger-Themen 5
O Hashmap, ArrayList, LinkedList Java Basics - Anfänger-Themen 7
O HashMap - ArrayList Java Basics - Anfänger-Themen 29
J Hashmap langsamer als compareTo? Java Basics - Anfänger-Themen 23
E HashMap+Vererbung Java Basics - Anfänger-Themen 11
J Erhöhen eines Values als Integer bei gleichen Keys in HashMap Java Basics - Anfänger-Themen 12
N Methoden HashMap interne Werte miteinander vergleichen Java Basics - Anfänger-Themen 7
W The type Long is not visible HashMap Java Basics - Anfänger-Themen 4
M Objekt mit Hashmap vergleichen Java Basics - Anfänger-Themen 22
S Gibt es für die Klasse HashMap Generic Implementierungen? Java Basics - Anfänger-Themen 11
C HashMap - alle keys haben values der letzten put-Anweisung Java Basics - Anfänger-Themen 3
J Hashmap auslesen Java Basics - Anfänger-Themen 7
F HashMap sortieren <String, Long> Java Basics - Anfänger-Themen 3
GreenTeaYT HashMap dupliziert meine Elemente? Java Basics - Anfänger-Themen 2
shiroX Methoden Morse-Code Übersetzer mit HashMap Java Basics - Anfänger-Themen 5
E HashMap Problem Java Basics - Anfänger-Themen 5
P Hashmap anstatt LinkedList? Java Basics - Anfänger-Themen 6
T HashMap und die Methoden Java Basics - Anfänger-Themen 13
N Methoden Interaktives PDF mit HashMap befüllen Java Basics - Anfänger-Themen 0
Z Hashmap auseinandernehmen und analysieren Java Basics - Anfänger-Themen 7
B Durchlaufen von Hashmap und Arraylist Java Basics - Anfänger-Themen 8
F HashMap oder welches Array? Java Basics - Anfänger-Themen 4
T HashMap Java Basics - Anfänger-Themen 24
L Hashmap mit variablem Key Java Basics - Anfänger-Themen 9
M Collections Probleme mit Hashmap Java Basics - Anfänger-Themen 4
N Collections String in HashMap umwandeln Java Basics - Anfänger-Themen 3
Z HashMap richtig benutzen Java Basics - Anfänger-Themen 2
lgund HashMap // TS3 Query Java Basics - Anfänger-Themen 7
Z Hashmap Iterator löscht nicht Java Basics - Anfänger-Themen 8
E Hashmap Wert auslesen Java Basics - Anfänger-Themen 2
S Printstream für einen Hashmap Loop Java Basics - Anfänger-Themen 1
dat_vin OOP Hashmap und Attribute Java Basics - Anfänger-Themen 7
C Check ob eine HashMap schon existiert Java Basics - Anfänger-Themen 16
P Vererbung Eigene HashMap Variante Java Basics - Anfänger-Themen 2
R Hashmap in anderer Klasse nicht benutzbar Java Basics - Anfänger-Themen 1
T Java Hashmap Java Basics - Anfänger-Themen 3
L Gibt es etwas wie "HashMap <String, String, String> Java Basics - Anfänger-Themen 9
K HashMap mit Daten aus ArrayList befüllen Java Basics - Anfänger-Themen 14
S OOP Klasse mit static-Eigenschaften - HashMap füllen Java Basics - Anfänger-Themen 6
O HashMap Fragen Java Basics - Anfänger-Themen 8
T HashMap Werte einfügen, durchsuchen und auslesen Java Basics - Anfänger-Themen 17
M Semantisches Problem HashMap/Netzwerk Java Basics - Anfänger-Themen 4
D HashMap Keys durchlaufen Java Basics - Anfänger-Themen 2
B Zugriff auf csv-Datei per hashmap Java Basics - Anfänger-Themen 5
M HashMap keys ausgeben Java Basics - Anfänger-Themen 2
H Collections Was ist schneller - HashMap + Sort v TreeMap? Java Basics - Anfänger-Themen 75
F HashMap nach kleinstem Value durchsuchen Java Basics - Anfänger-Themen 11
G HashMap Java Basics - Anfänger-Themen 6
F Wortpaare - HashMap - ArrayList Java Basics - Anfänger-Themen 6
M HashMap Frage Java Basics - Anfänger-Themen 3
M HashMap - put() reagiert nicht? Java Basics - Anfänger-Themen 8
N Cast eines Objektes in eine Hashmap Java Basics - Anfänger-Themen 13
A CSV Zeilenweise einlesen und in einer HashMap speichern Java Basics - Anfänger-Themen 12
A Input/Output Hashmap in einem JPanel via JList anzeigen Java Basics - Anfänger-Themen 8
K HashMap auf leere Key-Value-Paare prüfen Java Basics - Anfänger-Themen 14
F Hilfe bei der HashMap. Java Basics - Anfänger-Themen 3
F HashMap vs. TreeMap Java Basics - Anfänger-Themen 5
B HashMap Java Basics - Anfänger-Themen 9
C Collections String[] als value in HashMap Java Basics - Anfänger-Themen 6
V Hashmap Iterieren Java Basics - Anfänger-Themen 4
C Csv File in Hashmap ausgeben Java Basics - Anfänger-Themen 14
T HashMap<String,Object> Werte auslesen Java Basics - Anfänger-Themen 5
I HashMap sortieren Java Basics - Anfänger-Themen 10
I HashMap Java Basics - Anfänger-Themen 11
H Collections Brauche modifizierte HashMap Java Basics - Anfänger-Themen 6
H TreeMap/HashMap synchronisieren Java Basics - Anfänger-Themen 2
A Datentypen Hashmap to Array Java Basics - Anfänger-Themen 11
D HashMap überschreibt Werte Java Basics - Anfänger-Themen 7
pg1337 Interface Comparable-Interface bei HashMap Java Basics - Anfänger-Themen 21
D erweiterte hashmap Java Basics - Anfänger-Themen 5
H HashMap<Int, String> - Er findet die Int-Klasse nicht. Java Basics - Anfänger-Themen 3
L HashMap zu JList Java Basics - Anfänger-Themen 6
S Erste Schritte HashMap Kurze Frage - Werte über Schleife ausgeben Java Basics - Anfänger-Themen 30
F Collections ArrayList oder Hashmap mittel Collections.sychronised Java Basics - Anfänger-Themen 6
B Klassen HashMap Zwei Objekte, gleicher Key Java Basics - Anfänger-Themen 4
N HashMap fehlerhafte Rückgabe Java Basics - Anfänger-Themen 7

Ähnliche Java Themen

Neue Themen


Oben