вывести на печать имена экземпляров класса (имена элементов массива обьектов)

есть массив Food a[]={duck,hamster2,duck3,hamster17,hamster18,hamster19}; без переопределения метод Arrays.toString(a) выводит просто hash-code. После переопределения

@Override
public String toString() {
    return getClass().getSimpleName() + "[name="  + "]";
}

вывод на печать обоими способами

System.out.println("print arrayInt after filling " + Arrays.toString(a) );

        System.out.println("print arrayInt after filling " + Arrays.deepToString(a));

дает такой результат:

print arrayInt after filling [Food[name=], Food[name=], Food[name=], Food[name=], Food[name=], Food[name=]]

вопрос- как получить такой список: Food[duck][Food[name=humster], Food[name=duck2], Food[name=duck3], Food[name=hamster3]

eще у обьектов есть параметры, тоже нужно иметь возможность их выводить.

[Food[name=humster, weight=2000, color=white]

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

Автор решения: Sergei Buvaka

Ну переопределите правильно метод toString()

@Override
public String toString() {
    return getClass().getSimpleName() + "[name = "  +  name + ", weight = " + weight + ", color = " + color + "]";
}

Если вам не нужно чтоб каждый элемент списка оборачивался в квадратные скобки [] то распечатывайте не методом Arrays.toString(), а с помощью цикла:

for(Food food : foods){
    System.out.print(food.toString + ", ");
}
→ Ссылка
Автор решения: Alexey R.

Надо переопределить toString() у класса Food. В нём рефлексией пройтись по всем полям. Примерно так:

class Food {
    
    private String name;
    private int weight;
    private String color;

    public Food(String name, int weight, String color) {
        this.name = name;
        this.weight = weight;
        this.color = color;
    }

    @Override
    public String toString() {
        final String DELIMITER = ", ";
        StringBuilder stringBuilder = new StringBuilder();
        stringBuilder.append("Food[");
        Field[] fields = getClass().getDeclaredFields();
        for(Field field: fields){
            try {
                stringBuilder.append(field.getName() + " = " + field.get(this)).append(DELIMITER);
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            }
        }
        stringBuilder.delete(stringBuilder.length() - DELIMITER.length(), stringBuilder.length()).append("]");
        return stringBuilder.toString();
    }
}

Тогда такое:

public static void main(String[] args) {
    Food[] foods = {new Food("hamster", 100, "white"), new Food("horse", 1000, "black")};
    System.out.println(Arrays.asList(foods));
}

выведет:

[Food[name = hamster, weight = 100, color = white], Food[name = horse, weight = 1000, color = black]]

→ Ссылка