создание нескольких различных идентификаторов в Java - PullRequest
1 голос
/ 14 июля 2011

В качестве упражнения (обратите внимание, что я студент по программированию, но это упражнение для удовлетворения моего собственного любопытства, а не для оцениваемого задания) при использовании переменных экземпляра, я хотел бы создать неопределенное количество экземпляров классаи назначьте уникальное имя каждому.Моя идея заключалась бы в создании цикла, такого как:

int i=1;
while (! response.equals("quit")){
    SomeClass object_i = new SomeClass();
    i++;
...
}

Это позволило бы программе создать столько экземпляров SomeClass, сколько необходимо пользователю, а затем иметь возможность обращаться к переменным экземпляра в каждом из них.например:

for (i=1; i <= count; i++){
    sum += object_i.nonStaticInstanceVariable;
}

Существует предложение для уникальных имен идентификаторов, использующих AtomicLong в этом потоке: цикл java for выполняется слишком быстро, что дает дубликат System.currentTimeMillis ()

но я не уверен, как бы я ссылался на переменные экземпляра в конкретных объектах, созданных с использованием этого метода.Кто-нибудь может предложить способ сделать то, что я пытаюсь сделать на Java?

Большое спасибо.

Ответы [ 5 ]

1 голос
/ 14 июля 2011

В первом цикле for вы создаете экземпляры SomeClass, но с ними ничего не делаете.То, что вы хотите сделать, это собрать их в какую-то коллекцию, чтобы вы могли обратиться к ним позже, например:

int i=1;
List<SomeClass> classes = new ArrayList<SomeClass>();
while (! response.equals("quit")){
  classes.Add(new SomeClass());
  i++;
  ...
}

Теперь вы можете просмотреть свою коллекцию и сделать с ними что-то полезное:

for (SomeClass someClass : classes) {
  sum += someClass.nonStaticInstanceVariable;
}
0 голосов
/ 14 июля 2011

Я думаю, вы просто захотите использовать какую-то коллекцию, такую ​​как массив или массив данных.

List list = new ArrayList();
        int i=1; 
       while (! response.equals("quit"))
    {     list.add(new SomeClass());     
    i++;
} 

Доступ к нему можно получить, получив индекс в ArrayList

list.get(index);
0 голосов
/ 14 июля 2011

смеется, вы действительно только начинаете.
Читать это- http://download.oracle.com/javase/tutorial/java/nutsandbolts/arrays.html

Большая часть того, что у вас есть, имеет смысл, но вам нужно сделать -

SomeClass myObject[i] = new SomeClass();

РЕДАКТИРОВАТЬ: опции других людей тоже будут работать, но вы должны научиться делать это таким образом сначала .

0 голосов
/ 14 июля 2011

Вы не можете создавать переменные экземпляра во время выполнения (не считая компиляции и загрузки нового класса)

Используйте для этого массив или карту

(Или используйте динамический язык, такой как Groovyкоторый работает на JVM, которая внутренне будет использовать структуру, подобную карте)

0 голосов
/ 14 июля 2011

Я бы использовал карту и универсально уникальный идентификатор (UUID).См. Например, java.util.UUID .

Map<UUID,SomeClass> map = new HashMap<UUID,SomeClass>();

for (int i=0;i<1000000;i++) {
    UUID key = UUID.randomUUID()
    map.put(key, new SomeClass());
}

Теперь, если у пользователя есть UUID, он может получить ссылку на соответствующий SomeClass

...