добавить объекты с другим именем через цикл for - PullRequest
5 голосов
/ 12 марта 2010

Как лучше всего сделать следующее:

List<MyObject> list = new LinkedList<MyObject>();

for(int i=0; i<30;i++)
{
  MyObject o1 = new MyObject();
  list.add(o1);
}

Но дело в том, что я не хочу создавать объекты с одинаковыми именами, я хочу создавать их с разными именами, как o1,o2,o3,o4,o5,o6,o7,o8,o9,o10, и я хочу добавить каждый из них в список. Каков наилучший способ сделать это?

Ответы [ 6 ]

10 голосов
/ 12 марта 2010

Вам не нужно использовать другое имя для каждого объекта. Поскольку объект o1 объявлен в цикле for, область действия переменной o1 ограничена циклом for, и он создается заново во время каждой итерации ... за исключением того, что каждый раз он будет ссылаться на новый объект, созданный во время этой итерации. Обратите внимание, что сама переменная не хранится в списке, а только объект, на который она ссылается.

Если вам не нужно ничего делать с новым объектом, кроме как добавить его в список, вы можете сделать:

for(int i=0; i<30;i++)
{
  list.add(new MyObject());
}
7 голосов
/ 12 марта 2010

Почему вы хотите дать им разные имена? Вы создаете объект внутри цикла for, поэтому он не существует снаружи, и поэтому я не вижу смысла давать им разные имена.

Чтобы ответить на ваш вопрос: Единственное, что я вижу, но могу ошибаться, это сделать массив MyObjects и выполнить:

List<MyObject> list = new LinkedList<MyObject>();
MyObject[] o = new MyObject[30];

for(int i = 0; i < 30; i++) {
    o[i] = new MyObject();
    list.add(o[i]);
}
2 голосов
/ 12 марта 2010

Что вы могли бы сделать (хотя это тоже не имело бы большого смысла), это использовать карту вместо списка

Map<String, MyObject> map = new HashMap<String, MyObject>();

for (int i = 0; i < 10; i++) {
    map.put("o" + i, new MyObject());
}
2 голосов
/ 12 марта 2010

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

List<MyObject> list = new LinkedList<MyObject>();

for(int i=0; i<30;i++)
{
list.add(new MyObject());
}
1 голос
/ 12 марта 2010

Ваши объекты не имеют имен. Переменная o1 имеет имя, но оно не связано с объектом, за исключением того, что переменная ссылается на объект. Объект в списке не знает, что когда-либо на него ссылалась переменная o1.

Для того, что вы делаете, вам вообще не нужна переменная, как Стивен сказал в своем ответе, вы можете просто добавить объекты напрямую:

for (int i=0; i<30;i++)
{
    list.add(new MyObject());
}
0 голосов
/ 15 ноября 2013

Создайте объект, дайте ему имя, добавьте ваши конструкторы. затем добавьте имя объекта в список.

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