Ich versuche, einen Code zu erstellen, um eine Klasse dynamisch zu laden und sie zum Erstellen neuer Instanzen und zum Ausführen von Umwandlungen zu verwenden. Ich kann eine Instanz aus der neu geladenen Klasse mit dieser Methode erstellen: myClass.newInstance();
. Aber ich kann es nicht als Typ benutzen. Zum Beispiel: myClass myObj = new myClass();
Es funktioniert nicht. Ist es irgendwie möglich, etwas zu leisten?Ist es möglich, eine Klasse dynamisch zu laden und sie als Typ zu verwenden?
Dies ist der Code, den ich zu machen versuchte:
URL classUrl;
classUrl = new URL("file:///C:/classes/");
URL[] classUrls = { classUrl };
URLClassLoader ucl = new URLClassLoader(classUrls);
Class c = ucl.loadClass("Operation");
Class MyIn = ucl.loadClass("MyInter");
Object o = c.newInstance(); //IT WORKS
System.out.println(((MyIn) o).sum(2, 4)); //IT DOES NOT WORK. Message: MyIn cannot be resolved to a type
Fragen Sie, warum Sie die Klasse nicht zur Kompilierzeit verwenden können, wenn Sie sie nach der Kompilierzeit geladen haben? –
Sie haben Recht, aber ich möchte eine Möglichkeit, es dynamisch zu tun, MyIn dynamisch zu laden, anstatt es in das Projekt zu setzen –
'MyIn' in Ihrem Code ist ein Variablenname und Sie später versuchen,' o' auf den Schnittstellentyp 'zu werfen MyIn' - notiere die gleichen Charaktere hier! Ändern Sie den Namen der Variablen 'MyIn' in etwas Java-typischeres wie' myIn'. Sie könnten auch versuchen, eine Instanz von 'MyIn' mit einer Instanz von' MyIn instance = MyIn.getClass() .cast (o); 'zu übergeben und dann in Ihrer Anwendung als jede andere nicht dynamisch geladene Instanz von' MyIn' zu verwenden –