Hi,
Ich beschäftige mich momentan mit der Klasse Class. Und zwar möchte ich das eine Klasse die ich mit Class.forName(..) lade nur einmal instantiiert wird. Bzw. darfdie nur einmal instantiiert werden.
Jetzt ist meine Frage in wieweit das bei meinem Code sinnvoll ist. Da ich nämlich glaube das das garnicht geht wenn ich mehrere Klassen laden möchte.
Also mein Code sieht ungefähr so aus...jedenfalls das laden:
So hatte ich mir das ungefähr gedacht. Und name ist halt der Name der Klasse. Doch das geht ja so nicht oder? Denn wenn ich jetzt ein Klasse mehrmals aufrufen möchte, bekomme ich ja automatisch mehrere Instanzen. D.h. Wenn ich einmal eine Klasse mit getStatus() und die selbe Klasse mit startIndi() aufrufe. Wie gesagt das möchte ich aber nciht. es soll immer die selbe Instanz genommen werden.
Ich hab es auchs chon mit singleton probiert doch dann findet newInstance den constructor nicht, was ja logisch ist .
Gibt es eine möglichkeit abzufragen ob die Klasse die die IndStandardInit Klasse implementiert schon geladen wurde?
Wenn ich darüber hinaus noch verschiedene Klasse starten möchte dann wird i ( IndiStandardInit) doch überschrieben oder?
Wie kann ich das Verhindern?
Vielen Dank schonmal
Spinner0185
Ich beschäftige mich momentan mit der Klasse Class. Und zwar möchte ich das eine Klasse die ich mit Class.forName(..) lade nur einmal instantiiert wird. Bzw. darfdie nur einmal instantiiert werden.
Jetzt ist meine Frage in wieweit das bei meinem Code sinnvoll ist. Da ich nämlich glaube das das garnicht geht wenn ich mehrere Klassen laden möchte.
Also mein Code sieht ungefähr so aus...jedenfalls das laden:
Java:
public String startIndi(Indikatoren name) {
try {
Class<IndiStandardInit> cl = (Class<IndiStandardInit>) Class
.forName("main.kapelan.domaincheck.servertool.server.indikatoren."
+ name);
IndiStandardInit i = cl.newInstance();
return i.start();
// IndiStandardInit i = cl.newInstance();
// System.out.println("versucht zu starten");
// return i.start();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
return "fehler";
}
public Boolean getStatus(Indikatoren name) {
try {
Class<IndiStandardInit> cl = (Class<IndiStandardInit>) Class
.forName("main.kapelan.domaincheck.servertool.server.indikatoren."
+ name);
IndiStandardInit i = cl.newInstance();
return i.getStatus();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
return null;
}
So hatte ich mir das ungefähr gedacht. Und name ist halt der Name der Klasse. Doch das geht ja so nicht oder? Denn wenn ich jetzt ein Klasse mehrmals aufrufen möchte, bekomme ich ja automatisch mehrere Instanzen. D.h. Wenn ich einmal eine Klasse mit getStatus() und die selbe Klasse mit startIndi() aufrufe. Wie gesagt das möchte ich aber nciht. es soll immer die selbe Instanz genommen werden.
Ich hab es auchs chon mit singleton probiert doch dann findet newInstance den constructor nicht, was ja logisch ist .
Gibt es eine möglichkeit abzufragen ob die Klasse die die IndStandardInit Klasse implementiert schon geladen wurde?
Wenn ich darüber hinaus noch verschiedene Klasse starten möchte dann wird i ( IndiStandardInit) doch überschrieben oder?
Wie kann ich das Verhindern?
Vielen Dank schonmal
Spinner0185