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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.05.2011, 22:54   #1
[MI_nor]
Пользователь
 
Регистрация: 03.11.2008
Сообщений: 94
По умолчанию По id создать экземпляр класса.

Собственно вопрос. Есть файл, в нем располагаются некие айдишники. Так-же существует некое количество классов, у каждого из которых есть свой айдишник. Так вот, как создать экземпляр именно нужного мне класса из файла?
[MI_nor] вне форума Ответить с цитированием
Старый 10.05.2011, 12:56   #2
BleStaR
Форумчанин
 
Регистрация: 25.09.2009
Сообщений: 234
По умолчанию

Вот пример как это можно сделать:
Код:
public class Class1{

    public static final int id = 1;

    @Override
    public String toString(){
        return " this Class1";
    }

}

public class Class2{

    public static final int id = 2;

    @Override
    public String toString(){
        return "this Class2";
    }

}

public class Class3{

    public static final int id = 3;

    @Override
    public String toString(){
        return "this Class3";
    }

}

public class Main {

    public static void main(String [] args){
        // массив существующих классав
        Class [] array = {Class1.class, Class2.class, Class3.class};
        
        Object obj = null;
        // id полученный из файла
        int inId = 3;

        int temp = 0;

        for(Class c: array){
            try{
                // проверка id
                if (inId == c.getDeclaredField("id").getInt(temp)){
                    obj = c.newInstance(); // создаем экземпляр нужного класса
                    break;
                }
            } catch (NoSuchFieldException nsfe){
                nsfe.printStackTrace();
            } catch (SecurityException se){
                se.printStackTrace();
            } catch (IllegalArgumentException iae){
                iae.printStackTrace();
            } catch (IllegalAccessException iae){
                iae.printStackTrace();
            } catch (InstantiationException ie){
                ie.printStackTrace();
            }
        }

        System.out.println(obj);

    }
}
BleStaR вне форума Ответить с цитированием
Старый 10.05.2011, 13:07   #3
BleStaR
Форумчанин
 
Регистрация: 25.09.2009
Сообщений: 234
По умолчанию

Ну или второй вариант: если заранее знать у какого класса какой id, то можно просто через if-ы. Но по моему мнению первый способ лучше.
BleStaR вне форума Ответить с цитированием
Старый 12.05.2011, 03:33   #4
alexinspir
Новичок
Джуниор
 
Аватар для alexinspir
 
Регистрация: 26.08.2008
Сообщений: 1,010
По умолчанию

Цитата:
Сообщение от BleStaR Посмотреть сообщение
Но по моему мнению первый способ лучше.
Немного добавлю:
Рефлексия очень медленный механизм, и применять ее надо только когда без нее ну вообще никак не обойтись, либо если реализация других механизмов очень накладна(имеются ввиду трудозатраты).

Поэтому лучше через if(...){...}else if(...){...}else{...}
ромик0: Cколько получают здешние модераторы?
pu4koff: У модераторов сдельная оплата труда. Выдал предупреждение - плюс к премии. Выдал бан - лучший модератор месяца со всеми вытекающими.

Последний раз редактировалось alexinspir; 12.05.2011 в 04:36.
alexinspir вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Экземпляр класса как параметр dzjundzja88 C# (си шарп) 7 17.02.2011 18:33
функция, возвращающая экземпляр класса Juffin Общие вопросы Delphi 2 01.11.2010 17:42
Экземпляр класса с.делать доступным везде Casper-SC Общие вопросы .NET 6 08.04.2010 10:55
Один экземпляр класса Лубышев Общие вопросы .NET 2 31.10.2008 20:57