2012-04-04 5 views
1

Ich versuche pass Klasse als Wert in hashmap. Ich muss die Klasse (Wert) mithilfe eines bestimmten Schlüssels abrufen und ein Objekt für die abgerufene Klasse instanziieren. aber um ein Objekt zu erzeugen, muss ich Parameter übergeben.Übergeben Klasse in Hashmap und wie man den Wert mit Schlüssel

Mein Ablauf geht hier, wenn ich die getExpo-Methode von einer anderen Klasse den Schlüsselwert übergeben. Mit dem Schlüsselwert muss ich die richtige Klasse erhalten und diese Klasse muss das Objekt instanziieren und das Objekt zurückgeben. Um ein Objekt zu erzeugen, muss ich die Argumente übergeben, da die Klasse keine Standardkonstruktoren hat.

Der Zweck dieses Verfahrens in Zukunft, ich brauche einen anderen Schlüssel, Paar Mehrwert zu schaffen, i shouldnot jede Änderung tun ........ die Umsetzung ist für alle Arten gleichen, dh die Erstellung des Objekts

Meine Klasse geht hier

public class ExampleFactory { 

    static { 
     HashMap<String,Class<?>> hmap = new HashMap<String,Class<?>>(); 

     hmap.put("jxpath", JXPathExpression.class); 
     hmap.put("spel", SpelExpression.class); 
    } 

    public Predicate getExpo(String key,String expression) { 

     // Need to get the class using key value and instantiate the object for the class 
     // but i need to pass parameters in order to create the object.something like this 

     //JXPathExpression object = new JXPathExpression(expression); 
     return null; 
    } 
} 

Antwort

3

Versuchen

Class aClass = hmap.get(key); 
Constructor constructor = aClass.getConstructor(new Class[]{String.class}); 
return (Predicate) constructor.newInstance(expression); 
+0

Dank für Ihre Antwort danken ....... wenn ich es in der Methode getEcho implementieren .... Klasse aClass = hmap.get (Schlüssel); bekomme einen Fehler in hmap, da ich hashmap im statischen Block implementiert habe, kann ich nicht darauf zugreifen. – Jessie

+0

Ich brauche eine andere Hilfe ....... für einige Klassen muss ich zwei Argumente übergeben zB: (String, Klasse Typ) zB: (Ausdruck, Boolean.class), wie man es implementiert? und wie man wählt, welcher Konstruktor ausgeführt wird ... eine Klasse hat nur ein Argument mit String ....... eine andere Klasse hat zwei Argumente String und Klasse Jessie

+1

http://java.sun.com/developer/technicalArticles/ ALT/Reflexion / – Luca

Verwandte Themen