mit Class eine Klasse nur einmal instantiieren

Spinner0185

Mitglied
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:

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
 
S

SlaterB

Gast
Java:
public class Test
{
    public String startIndi(Indikatoren name)
    {
        return getIndy(name).start();
    }

    public Boolean getStatus(Indikatoren name)
    {
        return getIndy(name).getStatus();
    }

    private Map<String, IndiStandardInit> map = new HashMap<String, IndiStandardInit>();

    private IndiStandardInit getIndy(Indikatoren name)
    {
        String realName = name.toString();
        IndiStandardInit i = map.get(realName);
        if (i != null)
        {
            return i;
        }

        String fullName = "main.kapelan.domaincheck.servertool.server.indikatoren." + realName;

        try
        {
            Class<IndiStandardInit> cl = (Class)Class.forName(fullName);
            i = cl.newInstance();
            map.put(realName, i);
            return i;
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
        return null;
    }
}

class Indikatoren
{
}

interface IndiStandardInit
{
    Boolean getStatus();
    String start();
}
Ausgabe bei null gegebenenfalls ändern, in den einzelnen Methoden auf null prüfen,
die Map evtl. statisch
 

Suinos

Bekanntes Mitglied
Das caching kannst du über eine Map machen:
Als Key nimmst du entweder den Parameter oder die
Code:
Class
,
als Value dann das Objekt dieser Klasse.

Die Logik würde dann so aussehen:

Key in Map enthalten?
  • Ja: Value zurückgeben
  • Nein: Value erstellen, in Map legen, zurückgeben

Dies würde ich in einer privaten Methode machen, mit dem Objekt als Rückgabewert.
Die
Code:
public
-Methoden erhalten ihr Objekt dann über diese Methode und geben dann den jeweiligen Wert zurück.

@edit: Hey, Vormacher! :p
 

Spinner0185

Mitglied
ja SlaterB war schneller :)

Vielen dank euch beiden auf jedenfall. Ich wär da ncith drauf gekommen.

Super Sache es funktioniert :)


€dit: und wie klein die Klasse jetzt ist :D

Vielen Dank nochmal ihr habt mir sehr geholfen. Hatte vorher eine sehr umständliche Variante
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
antonbracke Aus Jar eine Class laden und damit arbeiten! Allgemeine Java-Themen 5
S Klassen .jar - eine .class datei ändern? Allgemeine Java-Themen 23
H aus .class datei eine .java erzeugen Allgemeine Java-Themen 4
D NoClassDefFoundError: Could not initialize class Allgemeine Java-Themen 0
J Class to link Java Allgemeine Java-Themen 4
C Was passt hier nicht bei der Calendar-Class Allgemeine Java-Themen 2
E Class.getResourceAsStream() gibt null zurück Allgemeine Java-Themen 2
Erwin82a Object cannot be converted to Custom Class in Lampda Expression Allgemeine Java-Themen 2
T Java Robot Class - Bot Allgemeine Java-Themen 3
S Class File Editor -> Source not found Allgemeine Java-Themen 4
G javafx "class path" exception Allgemeine Java-Themen 5
S Java class direved from inner class Allgemeine Java-Themen 6
S Inner Class Allgemeine Java-Themen 11
K Wildcard und class type Allgemeine Java-Themen 9
M Java model class ? Allgemeine Java-Themen 9
Thallius Ist meine static Helper Class Thread save? Allgemeine Java-Themen 9
S class path resource [config.properties}] cannot be opened because it does not exist Allgemeine Java-Themen 4
J Reflection Aufruf: .class durch .dll ersetzen Allgemeine Java-Themen 4
T Compiler-Fehler NoClassDefFoundError beim Laden einer Class Allgemeine Java-Themen 11
J Class Decompile als String (Procyon) Allgemeine Java-Themen 2
H Class 'java.io.BuferedReader' is not present in JRE Emulation Libary | GWT Fehler?! Allgemeine Java-Themen 0
I Datentypen String in class sicher verwahren Allgemeine Java-Themen 17
R Dynimc Class Loading Allgemeine Java-Themen 5
J Inner class + Leer-Konstruktor Allgemeine Java-Themen 1
Neumi5694 Methoden Generic: Rückgabetyp als Class-Parameter übergeben Allgemeine Java-Themen 3
D Collections.sort funktioniert nicht in exportierten .class Dateien Allgemeine Java-Themen 10
V Eclipse .class Dateien Allgemeine Java-Themen 9
KeexZDeveoper Von .class zu .java Allgemeine Java-Themen 7
N Wo ist Object.class ? Allgemeine Java-Themen 0
K Nicht alle class-Dateien im JRE? Allgemeine Java-Themen 2
M *.class Files ausführen Allgemeine Java-Themen 2
L Klassen Nested Class In Nested Class Allgemeine Java-Themen 3
perlenfischer1984 Dialect class not found exception Allgemeine Java-Themen 15
Tort-E Manifest Main-Class Allgemeine Java-Themen 8
I JSoup Class auslesen Allgemeine Java-Themen 1
K Generic class und Reflection Allgemeine Java-Themen 2
R .class Datei in .jar austauschen Allgemeine Java-Themen 2
R Java .class-File-Konstrunkt mit Programm visualisieren Allgemeine Java-Themen 18
A main-class Not found Allgemeine Java-Themen 3
T Java Class Intrumentation mit Annotations in Laufzeit Allgemeine Java-Themen 1
N Per Reflection auf (method) local inner class zugreifen? Allgemeine Java-Themen 3
P JDK installieren Error: Could not find or load main class HelloWorld.java Allgemeine Java-Themen 3
B public class JarFilter extends FileFilter « Falsch? Allgemeine Java-Themen 4
D Object nach Vererbung mit Class Object überprüfen Allgemeine Java-Themen 4
T Hash von *.class-Datein überprüfen Allgemeine Java-Themen 1
F java.lang.ClassNotFoundException: .class Allgemeine Java-Themen 5
T InvalidClassException - Read null attempting to read class descriptor for object Allgemeine Java-Themen 8
Phash Can't find Main Class Allgemeine Java-Themen 4
B Erste Schritte Plugin erkennen und Class Dateien anzeigen lassen Allgemeine Java-Themen 3
B json zu java class Allgemeine Java-Themen 2
D Class<CAP#1> statt Class<...> Allgemeine Java-Themen 5
T Class-Objekt mit URLClassloader Allgemeine Java-Themen 7
A Class Datei aus Verzeichnis über URLClassLoader laden Allgemeine Java-Themen 2
L Class Files , Methode .delete() Allgemeine Java-Themen 13
E NetBeans warning: [options] bootstrap class path not set in conjunction with -source 1.6 Allgemeine Java-Themen 4
X Could not find the main class programm will exit (textdokument) Allgemeine Java-Themen 3
S Could not find the main class Allgemeine Java-Themen 7
B Mal wieder "Could not find the main class" Allgemeine Java-Themen 3
B Variable class in java.lang.Object Allgemeine Java-Themen 11
C Could not find the main class. Allgemeine Java-Themen 15
A Could not find main class: start Allgemeine Java-Themen 5
S main() class finden Allgemeine Java-Themen 7
hdi Could not find main class? Allgemeine Java-Themen 8
R Warum Class.forName(); Allgemeine Java-Themen 7
C class.class angefordert ? Allgemeine Java-Themen 2
S Methoden Class.forName() >> Methoden - Reihenfolge Allgemeine Java-Themen 5
B Test$1.class mit dem javac compiler Allgemeine Java-Themen 7
G jar Datei findet Main Class nicht... Allgemeine Java-Themen 2
P Java Editor Could not find the main class GUI. Programm will exit. Allgemeine Java-Themen 3
D class Datei einlesen Allgemeine Java-Themen 4
T Interface > Abstract > Class Allgemeine Java-Themen 11
TheDarkRose Subversion .class Dateien auch commiten? Allgemeine Java-Themen 3
D API - Beispiel + static member in inner (non static) class Allgemeine Java-Themen 2
E String name in class convertieren Allgemeine Java-Themen 4
F Änderung in .jar bzw. .class vornehmen ? Allgemeine Java-Themen 18
H2SO3- bestimmte class immer mit 1.4 compilieren Allgemeine Java-Themen 5
B class dateien "einlesen" und objekte erzeugen Allgemeine Java-Themen 6
G Unterschied MyClass.class vs this Allgemeine Java-Themen 2
Sonecc Zugriff auf Class File einer anderen Jar während der Laufzeit Allgemeine Java-Themen 2
M Klasse aus xyz.class Datei laden / package entfernen? Allgemeine Java-Themen 4
BattleMaster246 Could not find the Main class Allgemeine Java-Themen 30
N class Task extends TimerTask ohne Blockieren Allgemeine Java-Themen 15
H .class in .java umwandeln Allgemeine Java-Themen 3
T class.newinstance + try/catch-konstruktor Allgemeine Java-Themen 6
X Cannot refer to a non-final variable settings inside an inner class defined in a different method Allgemeine Java-Themen 4
J Class.forName und CLASSPATH -Problem Allgemeine Java-Themen 5
T Class-files zur Laufzeit zu Reflection-Zwecken laden Allgemeine Java-Themen 18
G Thread in Methode oder in inner class Allgemeine Java-Themen 3
woezelmann referenz der outer class aus static nested class heraus Allgemeine Java-Themen 7
reibi Main-Class in Jarfile Allgemeine Java-Themen 3
E Timer class macht einfach garnichts :/ Allgemeine Java-Themen 6
D Class.forName Allgemeine Java-Themen 2
S Class RGB Farbe Allgemeine Java-Themen 2
S JavaDoc aus .class Datei extrahieren Allgemeine Java-Themen 5
mongole Class.class.getResource(...) Allgemeine Java-Themen 10
N Probleme mit .jar 'Could not find main class' Allgemeine Java-Themen 3
T Class Not Found Exception beim import von Paket Allgemeine Java-Themen 2
G Abstract class Stillfrage Allgemeine Java-Themen 4
P Class Casting: Graphics/Graphics2D Allgemeine Java-Themen 7
H2SO3- abstract class mit Beispielen in abstracten Methoden Allgemeine Java-Themen 5

Ähnliche Java Themen

Neue Themen


Oben