Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Java программирование > Общие вопросы по Java, Java SE, Kotlin
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.03.2013, 13:19   #1
Любовь_
Пользователь
 
Регистрация: 21.01.2013
Сообщений: 15
По умолчанию Создание объекта класса

Добрый день!
Возник такой вопрос:
есть некоторое количество классов myClass1, myClass2, myClass2,..,myClassN
В зависимости от приходящей переменной создается объект одного из классов,т.е.
если флаг=1, то myClass1 a = new myClass1()
если флаг=2, то myClass2 a = new myClass2()
если флаг=3, то myClass3 a = new myClass3()
и т.д.
Вопрос: Можно ли как-то программно задать имя класса, объект которого создается?
Естественно, что никакие
myClass.concat(флаг) a = new myClass.concat(флаг)()
не работают
спасибо!
Любовь_ вне форума Ответить с цитированием
Старый 11.03.2013, 13:53   #2
Carbon
JAVA BEAN
Участник клуба
 
Аватар для Carbon
 
Регистрация: 22.04.2007
Сообщений: 1,329
По умолчанию

Если укажете пакет, то можно так:
Код:
final String packageName = "ru.test";
final Object a = Class.forName(packageName + ".myClass" + flag).newInstance();
Можно так:
Код:
final String baseClassName = (myClass1.class.getPackage() == null ? "" : myClass1.class.getPackage().getName() + ".") + "myClass";
final Object a = Class.forName(baseClassName + flag).newInstance();
Если у этих классов есть общий класс-предок или они реализуют один и тот же интерфейс:
Код:
final BaseClassOrInterface a = (BaseClassOrInterface)Class.forName(baseClassName + flag).newInstance();

Последний раз редактировалось Carbon; 11.03.2013 в 16:03.
Carbon вне форума Ответить с цитированием
Старый 11.03.2013, 18:31   #3
Любовь_
Пользователь
 
Регистрация: 21.01.2013
Сообщений: 15
По умолчанию

Спасибо! Это помогло)
Не могли бы Вы посмотреть, насколько работоспособен будет такой код: (при условии, что класс имеет НЕ пустой конструктор, для примера int)

Код:
Class aa = Class.forName("test.getClass1");
Constructor c = aa.getConstructor(new Class[]{Integer.TYPE});
Object a = (Object)(c.newInstance(new Object[]{new Integer(1)}));
Если при этом класс getClass1 такой:
Код:
package test;
public class getClass1 {

	public getClass1(int q){
		System.err.println("q= "+q);
	}
}

Последний раз редактировалось Любовь_; 12.03.2013 в 16:26.
Любовь_ вне форума Ответить с цитированием
Старый 12.03.2013, 20:51   #4
Carbon
JAVA BEAN
Участник клуба
 
Аватар для Carbon
 
Регистрация: 22.04.2007
Сообщений: 1,329
По умолчанию

Вполне работоспособен.

Ну, можно не стесняться писать int.class
И new Integer(1) не очень, лучше Integer.valueOf(1)

В общем, я бы сделал так:
Код:
final Class<?> klass = Class.forName("test.getClass1");
final Constructor<?> ctor = klass.getConstructor(int.class);
final Object instance = ctor.newInstance(1);
Carbon вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
создание объекта произвольного класса по указателю на базовый класс(Visual C++) mir_zol Помощь студентам 6 03.12.2012 22:34
Создание объекта класса KyJIJIEP Visual C++ 3 20.09.2012 01:29
Создание объекта класса в WinMain Стремящийся Win Api 5 10.03.2012 19:01
[Java] Создание объекта внутри объекта этогоже класса. Svarogich Помощь студентам 2 01.08.2011 16:03
Создание объекта класса Serjuk Помощь студентам 1 23.05.2010 19:30