Как получить экземпляр подкласса, когда я знаю имя класса как String в Java? - PullRequest
2 голосов
/ 30 августа 2011

Я хочу создать экземпляры классов Java (которые расширяют суперкласс) во время выполнения.

Вот несколько примеров классов:

class Super {
}

class FirstSub extends Super {
}

class SecondSub extends Super {
}

Я знаю имя класса как строку:

String name = "SubClassName";

Это был мой первый подход:

Super foo;
if (FirstSub.class.getSimplename().equals(name)) {
    foo = new FirstSub();
}
if (SecondSub.class.getSimplename().equals(name)) {
    foo = new SecondSub();
}

Как мне получить экземпляр одного из "подклассов" более сложным способом?

РЕДАКТИРОВАТЬ: Дополнительно я хочу привести foo к SubClassName.

Ответы [ 3 ]

9 голосов
/ 30 августа 2011
Class myClass = Class.forName(name);
Object o = myClass.newInstance();
Super instance = (Super)o;
//Subclass instance2 = (Subclass)o;

Динамическое приведение, что ваша переменная ссылка будет Подклассом, невозможно и недостойно.Если в этом месте ваш объект может быть FirstSub или SecondSub, то оба эти объекта должны обеспечивать некоторую заданную функциональность (метод).Вы должны определить некоторый (например, абстрактный) метод в суперклассе (или сделать его интерфейсом).Затем, если у вас есть такая строка:

Super instance = (Super)o;

, где o - это экземпляр подкласса Super, то вызов вашего метода вызовет метод для подкласса.Это красота полиморфизма

3 голосов
/ 30 августа 2011
Super s = (Super) Class.forName(str).newInstance();

Полагаю, это сработает.

0 голосов
/ 30 августа 2011

вот пример

try{
   Class my_class = Class.forName(class_name);
   // use my_class object to
   Object initClassObj = my_class.newInstance();
}catch(ClassNotFoundException ex){
   // handle exception
}catch(Exception ex){
   // handle other exception 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...