class ClassA {
private int a;
public void setA() {
a = 15;
System.out.println(a);
}
}
class ClassB extends ClassA {
public static void main( String[] args ) throws IllegalAccessException, InstantiationException {
Class cls = ClassB.class;
ClassB obj = (ClassB) cls.newInstance();
obj.setA(); //Accessible
obj.test(); // Accessible
}
public void test() {
setA();
}
}
Это должно быть так.
Вы хотите создать экземпляр класса по его имени?
Прежде всего, вам нужно создать объект Class:
Class cls = Class.forName (strClassName);Затем создайте его экземпляр (обратите внимание, это может привести к различным исключениям - нарушение доступа, ClassNotFound, открытый конструктор без аргументов и т. Д.)
Object instance = cls.newInstance();
Затем вы можете привести его:
return (SomeClass)пример;Пожалуйста, убедитесь, что вы понимаете различия между:
Имя класса (приблизительно имя файла) Объект класса (по сути информация о типе) Экземпляр класса (фактический объект этого типа) Вы также можете приводить clsобъект должен иметь тип Class, если хотите.Это не дает вам много, хотя.И вы можете встроить его в:
return (SomeClass) (Class.forName (strClassName) .newInstance ());Да, но вы можете выполнить проверку типов с помощью объекта cls, прежде чем создавать его экземпляр.Таким образом, вы создаете его только в том случае, если он удовлетворяет вашему API (реализует интерфейс, который вы хотите получить).
РЕДАКТИРОВАТЬ: добавить дополнительный пример кода к отражению.
Например:
if (cls.isInstance(request)) {
// ...
}