Создание объекта класса по его имени

В общем виде это выглядет так (http://java-online.ru/java-reflection.xhtml):

1
2
3
Class aclass = Class.forName("Test");
Object obj = aclass.newInstance();
Test test = (Test) obj;

Пример:
файл Person.java с объявлением интерфейса, в котором содержатся классы:

1
2
3
4
5
6
7
8
9
package com.javarush.task.task14.task1411;
public interface Person {
    class User implements Person {
        void foo() { System.out.println("Something"); }
    }
    class Coder implements Person {
        void foo() { System.out.println("Something"); }
    }
}

фрагмент файла Solution.java, находящийся в том же пакете:

1
2
3
4
5
6
7
try{
    Class c = Class.forName("com.javarush.task.task14.task1411.Person$User");
    Person person = (Person)c.newInstance();
}
catch (Exception | NoClassDefFoundError e){
    System.out.println(e);
}

Замечу, что если в строке 2 вместо $User будет $user (ошибка в регистре), то будет брошен NoClassDefFoundError.

(Просмотрено 42 раз, 1 раз за сегодня)
Вы можете оставить комментарий, или Трекбэк с вашего сайта.

Оставить комментарий