2010-04-03 1 views
-1

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

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; 
     } 
} 
+0

Это очень поможет, если вы объясните, почему вы пытаетесь это сделать. Вероятно, есть намного более чистый метод того, что вы пытаетесь выполнить, чем то, что вы пытаетесь сделать здесь. В чем смысл этих массивов? Почему их нужно называть? Что вы будете хранить в них? –

+0

Их нужно называть просто потому, что не было другого способа различать два или более объектов. Это похоже на сохранение ArrayList, но я думаю, что извлечение строки из объекта каждый раз, когда мне нужно получить доступ к arraylist, происходит слишком медленно. – pandoragami

ответ

0

Вслед за ответом @ Ash, приведен пример иллюстративного кода. Обратите внимание, что в этом нет никакого отражения.

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" 

EDIT Я редактировал пример использования типа Object, так что более тесно связаны с тем, что вы пытаетесь сделать (я думаю). Но вы можете использовать любой тип вместо Object ... просто замените тип в этом примере. И вы можете сделать то же самое с ArrayList; например:

Обратите внимание: никаких приводов не требуется.

+0

Нужно ли преобразовать объект с именем «albert» в строку, если он сначала сохранил строку (обычно это требуется для ArrayList, который только сохраняет объект и «чтение» из него требует кастинга)? Как я буду писать/читать «albert», или это то, что делает myMap.get («albert»)? Спасибо за помощь до сих пор, у меня нет куки, потому что у меня нет репутации. – pandoragami

+0

Теперь я вижу, ну, я думаю, это решает проблему. Как я могу указать это? – pandoragami

+0

Вы должны отметить свой вопрос как ответ, выбирая наиболее полезный ответ в качестве решения и проголосовав ответы, которые помогли вам понять и решить вашу проблему. – stefanglase

3

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

0

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

c = Class.forName(object); 

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

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

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

+0

Извините за недостаток опыта, но я новичок в Java и никогда даже не использовал карту. Мне интересно, можете ли вы привести мне пример. – pandoragami

Смежные вопросы