Я начинаю с ООП И у меня есть следующая проблема: я создал новый класс Затем я сделал экземпляр из этого класса Теперь для каждого случая я хочу что-то сделать Я пробовал это с циклом for each, но он не работает... Есть некоторые проблемы с синтаксисом
Это класс:
package main;
public class command
{
String call;
String execute;
}
А это из основного класса:
private static void load() {
command greeting = new command();
greeting.call = "hello";
greeting.execute = "Hello Sir";
for (command c: command) {
System.out.println("Another command...");
}
}
Я не знаю, как сделать петлю или есть другой способ сделать это?
Чтобы выполнить итерацию, вы должны поместить экземпляры в массив или Iterable
контейнер, например. грамм. List
@Robert Kock Я знаю, но для этого я должен делать это для каждого экземпляра, а это слишком долго, потому что позже я создам экземпляры из файла xml, а затем у меня будут сотни экземпляров. Чтобы сделать это автоматически, я должен пройти через экземпляры с циклом. И это моя проблема
@ТристанК. см. ответ Бастьена. это совершенно ясно
Синтаксис, который вы используете в цикле for
, должен использовать экземпляр класса, реализующего интерфейс Iterable
. Например, вы можете использовать реализации интерфейса List
.
Например, вы можете попробовать:
private static void load() {
command greeting = new command();
greeting.call = "hello";
greeting.execute = "Hello Sir";
List<command> listOfCommands = new ArrayList<>();
listOfCommands.add(greeting);
for (command c: listOfCommands) {
System.out.println("Another command...");
}
}
Я знаю, но для этого я должен сделать это для каждого экземпляра, а это слишком долго, потому что позже я создам экземпляры из файла xml, а затем у меня будут сотни экземпляров. Чтобы сделать это автоматически, я должен пройти через экземпляры с циклом. И это моя проблема. Хорошо, позже, когда я прочитаю их из файла xml, я автоматически помещу их в массив. Спасибо.
Не уверен, что четко понимаете, что вы хотите сделать. Если вы хотите сохранить каждый экземпляр класса, чтобы вы могли легко получить к ним доступ позже, вы можете использовать список static
, в который вы добавили бы каждый экземпляр класса при его создании, но я не уверен, что это то, что вы ищешь.
Вы можете создать статический список внутри команды класса, к которому добавляются экземпляры в конструкторе(ах). Тогда у вас всегда будут ссылки на любые создаваемые экземпляры.
Вот пример:
import java.util.List;
import java.util.ArrayList;
public class command
{
String call;
String execute;
public static List<command> commands = new ArrayList<>();
public command() {
commands.add(this);
}
public command(String call, String execute)
{
this.call = call;
this.execute = execute;
commands.add(this);
}
public String toString()
{
return "call: " + call + " | execute: " + execute;
}
}
Класс драйвера:
public class driver
{
public static void main(String[] args)
{
for(int i = 1; i <=10; i++)
{
command c = new command("call" + i, "execute" + i);
}
for(command cmd: command.commands)
{
System.out.println(cmd);
}
}
}
Выход:
Чтобы использовать
for each
, вам нужна какая-то коллекция. Создайте, например,List
команд, добавьте 1 или более элементов в этот список и выполните цикл по этому списку.