Я пытаюсь сделать код для динамической загрузки класса и использовать его для создания новых экземпляров и запускает броски. Я могу создать экземпляр из недавно загруженного класса, используя этот метод: myClass.newInstance();
. Но я не могу использовать его как тип. Например: myClass myObj = new myClass();
Это не работает. Можно ли как-то это сделать?Можно ли динамически загружать класс и использовать его как тип?
Это код, который я пытался сделать:
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
Вы спрашиваете, почему вы не можете использовать класс во время компиляции, когда вы загрузили его после компиляции? –
Вы правы, но я хотел бы сделать это динамически, загружая MyIn динамически, вместо этого помещая его в проект. –
'MyIn' в вашем коде - это имя переменной, и вы позже попытаетесь применить' o' к типу интерфейса ' MyIn' - обратите внимание на те же персонажи! Измените имя переменной 'MyIn' на нечто более типичное для Java, например' myIn'. Вы также можете попытаться отличить o от экземпляра 'MyIn', используя:' MyIn instance = MyIn.getClass(). Cast (o); ', а затем использовать его в своем приложении, как и любой другой, динамически загруженный экземпляр' MyIn' –