Java: создание объектов массивов с разными именами во время выполнения и доступ к ним / их обновление - PullRequest
0 голосов
/ 03 апреля 2010

Я пытаюсь создать класс, который может создавать экземпляры массивов во время выполнения, давая каждому массиву «имя», созданное методом createtempobjectname (). У меня проблемы с запуском этой программы. Я также хотел бы увидеть, как я могу получить доступ к определенным объектам, которые были созданы во время выполнения, и получить доступ к этим массивам, либо изменив значение, либо получив доступ к ним. Пока это мой беспорядок, который компилируется, но получает исключение времени выполнения.

import java.lang.reflect.Array;

public class arrays
{
    private static String temp;
    public static int name = 0;
    public static Object o;
    public static Class c;

        public static void main(String... args)
        {
            assignobjectname();
            //getclassname();//this is supposed to get the name of the object and somehow 
                             //allow the arrays to become updated using more code?
        }
        public static void getclassname()
        {
            String s = c.getName();
            System.out.println(s);
        }
        public static void assignobjectname()//this creates the object by the name returned
        {                                    //createtempobjectname()
             try
             {
              String object = createtempobjectname();
                c = Class.forName(object);
                o = Array.newInstance(c, 20);
             }
             catch (ClassNotFoundException exception)
             {
                exception.printStackTrace();
             }
        }
        public static String createtempobjectname()
        {
            name++;
            temp = Integer.toString(name);

            return temp;
        }
}

Ответы [ 3 ]

3 голосов
/ 03 апреля 2010

Создайте карту, затем вы можете добавить пары ключ / значение, когда ключ - это ваше имя, а значение - ваш массив.

0 голосов
/ 03 апреля 2010

В ответ на ответ Эша приведем несколько иллюстративных кодов. Обратите внимание, что здесь нет отражения.

Map<String, Object> myMap = new HashMap<String, Object>();
...
Object myObject = ...
myMap.put("albert", myObject);  // record something with name "albert"
...
Object someObject = myMap.get("albert");  // get the object named "albert"
// get("albert") would return null if there nothing with name "albert"

РЕДАКТИРОВАТЬ Я отредактировал пример для использования типа Object, поскольку он более точно соответствует тому, что вы пытаетесь сделать (я думаю). Но вы можете использовать любой тип вместо Object ... просто замените тип в этом примере. И вы можете сделать то же самое с ArrayList; например:

List<Date> dates = new ArrayList<Date>();
dates.add(new Date());
Date firstDate = dates.get(0);

Обратите внимание, что типы не требуются.

0 голосов
/ 03 апреля 2010

Я ожидаю, что вы получаете ClassNotFoundException из этой строки:

c = Class.forName(object);

Значение object при первом вызове - "1", что не является допустимым именем класса.

Class.forName требует ввода имени класса, такого как "java.lang.Integer". Попытка «назвать» ваш массив таким образом не имеет смысла для меня. Вам нужно выбрать подходящее имя класса Java.

Если вы хотите «назвать» экземпляр массива (после того, как вы его создали), вы всегда можете сохранить экземпляр как значение в Map, используя имя в качестве ключа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...