2012-10-10 8 views
7

Próbuję utworzyć obiekt klasy dynamicznie, wysyłając nazwę klasy jako ciąg. Przeszukałem wszystkie fora Java, ale nie mogłem uzyskać odpowiedzi, której szukałem. Tu jest mój wymóg, Mam klasy o nazwie pełnomocnika,Tworzenie obiektu dynamicznie, gdy nazwa klasy jest podana jako ciąg

package somePack; 

public class Agent{ 
    private String Id; 
    Private String Name; 
    public String getId() { 
    return this.id; 
    } 
    public void setId(String id) { 
    this.id = id; 
    } 
    public String getName() { 
    return this.name; 
    } 
    public void setName(String name) { 
    this.name = name; 
    } 
} 

package somePack; 

public class Employee{ 
    private String Id; 
    Private String Name; 
    public String getId() { 
    return this.id; 
    } 
    public void setId(String id) { 
    this.id = id; 
    } 
    public String getName() { 
    return this.name; 
    } 
    public void setName(String name) { 
    this.name = name; 
    } 
} 
public class create{ 
    public static void main(String[] args){ 
     newCreate("Employee"); 
     newCreate("Agent"); 
    } 
    public static void newCreate(String name){ 
     String path="somePack."+name; 
     Class cls=Class.forName(path); 
     System.out.println("Class Name " + cls.getName()); 
    } 
} 

Teraz moje pytanie brzmi, cls.getName() daje mi nazwę klasy, ale teraz chcę utworzyć obiektu dla tej klasy IE , odpowiednio dla klasy Employee i klasy Agent, ale jak mogę utworzyć obiekt dla nich? Ciąg, który jest przekazywany może być czymś innym z drugiej metody, jak mogę utworzyć obiekt dla takich rzeczy.

Czy ktoś może mi pomóc ....

Dziękuję z góry,

+2

Class.forName() Lookup do tego. – mihsathe

Odpowiedz

6

Zastosowanie Class#newInstance()

Object o = Class.forName(path).newInstance(); 

Następnie można rzucić to do agenta.

Agent agent = (Agent) Class.forName(path).newInstance(); 
+0

Jeśli używam Object o = Class.forName (ścieżka) .newInstance(); to jak mogę ustawić i uzyskać wartości dla klasy. – Praveen

+0

Cześć Matthew, dziękuję za odpowiedź, ale jeśli istnieje około 50 klas i na podstawie pewnych kryteriów wysyłam związany z nimi ciąg znaków jako parametr, to jak mogę wiedzieć, który obiekt klasy zostanie utworzony dynamicznie. Tj, teraz przekazuję go jako "Agent", a następnie, jeśli mogę przekazać "Pracownik", to w jaki sposób ta metoda będzie dla mnie przydatna do generowania wartości zmiennej łańcuchowej jako obiektu – Praveen

8

ale teraz chcę utworzyć obiektu dla tej klasy

Następnie użyj metody Class.newInstance() jeśli nie trzeba obsłużyć konstruktorów z argumentami lub użyj Class.getConstructor(...) lub Class.getConstructors() inaczej. (Zadzwoń pod numer Constructor.newInstance(), aby wywołać konstruktora.)

+0

Mam mnie przez 17 sekund – MadProgrammer

+0

cześć Jon, I chcesz utworzyć obiekt dla klasy wartości zmiennej łańcuchowej. Jeśli nie znam go jako "Agent", może to być coś innego, to jak mogę go wygenerować dynamicznie ... mam nadzieję, że dostałem moje pytanie ... – Praveen

5

Na tej podstawie, że klasa ma domyślny konstruktor (tzn. Brak parametrów), możesz po prostu zadzwonić pod numer Class#newInstance.

Jeśli ma parametry, staje się nieco bardziej skomplikowany.

Będziesz musiał uzyskać odniesienie do odpowiedniego Constructor poprzez Class#getConstructor, przekazując oczekiwane typy klas parametrów.

Kiedy już, że można zadzwonić Constructor#newInstance przekazując mu odpowiednie obiekty

+3

3 + Trzech bardzo dobrych facetów walczących o proste rozwiązanie :) –

Powiązane problemy