Привет!
Задачу решил. Но больше методом тыка.
Помогите разобраться:
1) В коде есть:
public String toString() {
return name != null ? name.toUpperCase() : null;
Как я понимаю, эта конструкция возвращает name в верхнем регистре, если что=-то не null. И возвращает null в противном случае. На null что здесь проверяется? name? А откуда оно передается в public Cat(String name)? И в какой момент программа выполняет этот кусок: public String toString() {
return name != null ? name.toUpperCase() : null;
?
2) HashMap<String, Cat> map = addCatsToMap(cats);
Это какая-то конструкция вместо Map<String, String> map = new HashMap<String, String>(); ?
мы создаем переменную map типа HashMap? а првила, как создавать описываем в операции addCatsToMap(cats), передавая туда массив имен котов?
И раз мы что-то туда передали, то и операция addCatsToMap должна что-то в return вернуть?
3) public static HashMap<String, Cat> addCatsToMap(String[] cats) {
HashMap<String, Cat> map = new HashMap<String, Cat>();
for(int i=0;i<cats.length; i++)
map.put(cats[i], new Cat(cats[i]));
return map;
}
Как это работает?
Что значит: HashMap<String, Cat> map = new HashMap<String, Cat>(); ? Ключ - стринг, а значение некий тип Cat? Что значит значение типа Cat? Этот тип описан ниже в public static class Cat {
String name;
?
Т.е. тип Cat - это просто имя name? А потенциально могло быть сколько угодно атрибутов описано в классе Cat&
map.put(cats[i], new Cat(cats[i]));
Здесь cats[i] понятно - это ключ и его значение = имени кота из массива.
А почему значение записывается как new Cat(cats[i]) ? Почему не просто cats[i] ?