Можно ли в java внедрять одну переменную в название другой?

Предположим, есть класс Cat и я хочу создать 10 его экземпляров, затем со всеми 10-ти однотипно поработать (вызвать одинаковые методы, как пример). Можно ли создать цикл, внутри которого создавать объекты cat1, cat2, cat3... или можно создавать объекты только вручную?


Ответы (2 шт):

Автор решения: Sergey Chernikov

Так не получится. С помощью цикла можно просто заполнить массив обьектами типа Cat. И я считаю, что это будет правильнее. Просто вместо обращения по ссылке cat1 написать cat[1] и все. Зачем засорять программу, если можно хранить все в массиве или списке)

В крайнем случае можно воспользоваться HashMap. В качестве ключа присваивать обьект типа Cat, в качестве значения - его название, например, cat1.

→ Ссылка
Автор решения: m. vokhm

Создавать динамически переменные с разными именами в Java нельзя, да это и не нужно, есть несколько способов решить вашу задачу без этого. Для этого можно использовать массивы (если нужное количество элементов известно к началу цикла) или коллекции. Например, так:

Cat[] cats = new Cat[10]; // Создаем пустой массив вместимостью 10 кошек

// Заполняем массив кошками:
for (int i = 0; i < cats.length; i++)
  cats[i] = new Cat();

// Дергаем всех кошек по очереди за хвост
for (Cat cat: cats)  
  cat.sayMeow();

// Дергаем пятую кошку (счёт в массивах всегда с 0) 
cats[4].sayMeow();

Или используем одну из коллекций из стандартного пакета java.util, размер при этом может быть заранее неизвестен:

ArrayList<Cat> cats = new ArrayList<>(); // новый пустой список
while (!enoughCats(cats)) // Какая-то внешняя проверка, достаточно ли кошек в списке
   // Заранее знать количество нет нужды,
   // просто добавляем, пока не будет достаточно 
   cats.add(new Cat()); // Добавляем новую кошку

// Дергаем всех кошек по очереди за хвост 
for (Cat cat: cats)  
  cat.sayMeow();

// Дергаем пятую кошку (счёт, как и в массивах, всегда с 0) 
cats.get(4).sayMeow();
→ Ссылка