# Per Reflection neues Objekt erzeugen



## Tobias (28. Jan 2004)

High,
ich habe eine Reihe von Klassen, die alle von JPanel abgeleitet sind. Von den Klassen weiß ich nur den Namen (inklusive package) und dass sie alle einen Konstruktor ohne Parameter haben. Derzeit sieht mein Code wie folgt aus (nicht funktionsfähig):


```
Hashtable moduleData = (Hashtable)modEnum.nextElement();

if(moduleData.get("icon") != null) {
   modIcon = new ImageIcon((String)moduleData.get("icon"));
}
            
Class clazz = Class.forName((String)moduleData.get("class"));
JPanel modPanel = clazz.getConstructor().newInstance();
tp.addTab((String)moduleData.get("name"), modIcon, modPanel, (String)moduleData.get("toolTip"));
```

Was ist verkehrt?

mpG
Tobias


----------



## me.toString (28. Jan 2004)

Statt 

```
JPanel modPanel = clazz.getConstructor().newInstance();
```
würde ich nur

```
JPanel modPanel = clazz.newInstance();
```
machen.
Bekommst du denn eine Fehlermeldung ( beim compilieren / starten ) ... oder funzt es einfach nur nicht ?


Michael


----------



## Tobias (28. Jan 2004)

Danke, so funzt es. Wirft der eine Exception, wenn das neu erstellte Objekt nicht auf JPanel gecastet werden kann?

Supervielen Dank für die schnelle Antwort!

mpG
Tobias


----------



## bygones (28. Jan 2004)

Die beiden Sachen können eine Reihe von Exceptions werfen....


```
Class.forName(String clazz)

Throws: 
LinkageError - if the linkage fails 
ExceptionInInitializerError - if the initialization provoked by this method fails 
ClassNotFoundException - if the class cannot be located
```


```
clazz.newInstance()

Throws: 
IllegalAccessException - if the class or its nullary constructor is not accessible. 
InstantiationException - if this Class represents an abstract class, an interface, an array class, a primitive type, or void; or if the class has no nullary constructor; or if the instantiation fails for some other reason. 
ExceptionInInitializerError - if the initialization provoked by this method fails. 
SecurityException - if there is no permission to create a new instance.
```


----------

