2016-06-17 6 views
0

Ich brauche eine Klasse in meinem Klassenpfad nach dem Kompilieren meines Programms.Reflection und ClassLoader in Java

Dann habe ich den Classloader mit Java Reflexion, wie dem folgenden Code:

Class NewUnit; 
Constructor constructor; 

ClassLoader myClassLoader = ClassLoader.getSystemClassLoader(); 

// Define a class to be loaded. 
String classNameToBeLoaded = "monarchs_project.Axe"; 

NewUnit = myClassLoader.loadClass(classNameToBeLoaded); 

constructor = NewUnit.getConstructor(int.class, int.class, int.class, int.class); 

NewUnit newUnit = (NewUnit) constructor.newInstance(1, 1, 1, 1); 

Die Parameter der Ax-Klasse sind int.

Aber es funktioniert nicht. Die Methode getConstructor() funktioniert nicht. Danke.

Antwort

0

int.class ist keine gültige Klasse. Sie müssen die statischen Variablen Type in den Wrapper-Klassen verwenden, um ein Klassenobjekt für einen primitiven Typ zu erhalten. Ihr getConstructor Aufruf sollte folgendermaßen aussehen.

constructor = NewUnit.getConstructor (java.lang.Integer.TYPE, java.lang.Integer.TYPE, java.lang.Integer.TYPE, java.lang.Integer.TYPE);

+0

Danke! Jetzt funktioniert es! – user3294746

+0

Der Konstruktor arbeitet jetzt, aber ich kann keine Instanz der Klasse im newUnit-Objekt erstellen. IDE sagt: "Create NewUnit-Klasse im Projekt". Ich löse dies mit diesem: Objekt newUnit = constructor.newInstance (0, 0, 0, 0); – user3294746