Можно ли в java внедрять одну переменную в название другой?
Предположим, есть класс Cat и я хочу создать 10 его экземпляров, затем со всеми 10-ти однотипно поработать (вызвать одинаковые методы, как пример). Можно ли создать цикл, внутри которого создавать объекты cat1, cat2, cat3... или можно создавать объекты только вручную?
Ответы (2 шт):
Так не получится. С помощью цикла можно просто заполнить массив обьектами типа Cat. И я считаю, что это будет правильнее. Просто вместо обращения по ссылке cat1 написать cat[1] и все. Зачем засорять программу, если можно хранить все в массиве или списке)
В крайнем случае можно воспользоваться HashMap. В качестве ключа присваивать обьект типа Cat, в качестве значения - его название, например, cat1.
Создавать динамически переменные с разными именами в 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();