вывести на печать имена экземпляров класса (имена элементов массива обьектов)
есть массив 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 шт):
Ну переопределите правильно метод 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 + ", ");
}
Надо переопределить 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]]