Я объявил интерфейс вроде следующегополиморфизм и создание объекта с помощью строки
public interface One {
void setNo(int no);
}
Тогда у меня есть класс для реализации интерфейса
public class Two implements One{
private int no;
@Override
public void setNo(int no){
this.no = no;
}
}
у меня будет много классов для реализации интерфейс, а затем я хочу создать соответствующий объект в соответствии с пользовательским вводом.
Предположим, у нас есть классы Three, Four, Five, описанные как класс Two.
Пользователь выбирает для создания класса Три. Поэтому я пытаюсь сделать что-то вроде
One base;
Class c = Class.forName("Three");
base = (One) c.newInstance();
base.setNo(5);
звонок на base.setNo() не работает. Правильно ли я это делаю?
Ошибка
java.lang.ClassNotFoundException: Three
at java.net.URLClassLoader$1.run(URLClassLoader.java:372)
at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:360)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:260)
at com.company.Main.main(Main.java:33)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:483)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:134)
Что ошибка? и ваш код выше даже компиляции? – SMA
Попробуйте использовать полное имя класса – Eran
Кроме того, если код из трех аналогичен коду Two, 'setNo' является закрытым пакетом, что означает, что вы не можете получить к нему доступ из класса, который не находится в одном пакете. – Eran