public static List<Integer> getIntegerList() throws IOException { Объясните глупому сомаритянену зачем при создании метода здесь писали List<Integer> и throws IOException. Без них никак?
P.S. Метод создавали чтоб создать список чисел.
ak
22 уровень
Для чего?
Решен
Комментарии (10)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
JustinianJudge в Mega City OneMaster
3 апреля 2020, 21:45
List<Integer> это тип возвращаемого значение. Это значит, что метод должен обязательно вернуть список Интеджеров.
throws IOException говорит о том, что в самом методе есть исключения, подлежащие обработке, но обрабатывать мы их не хотим в этом методе, а пробрасываем наверх - в тот метод, из которого идет вызов getIntegerList().
Скорее всего там идет считывание с клавиатуры, во время чего могут быть различные исключения - например поток чтения закрыт и тд.
Пока что просто воспринимай как должное.
0
ak
5 апреля 2020, 15:09
т.е если в методе мы вощвращаем значение с помощью return нужно указывать тип этого значения? а почему просто void не написать в шапке метода?
0
ak
5 апреля 2020, 15:17
вот например в следующей задаче есть два типа методов:
//соединяем два меожества cats, dogs в одно pets
public static Set<Object> join(Set<Cat> cats, Set<Dog> dogs) {
Set<Object> pets = new HashSet<>();
pets.addAll(cats);
pets.addAll(dogs);
return pets;
}
// выводим на экран элементы множества pets
public static void printPets(Set<Object> pets) {
for (Object x : pets) {
System.out.println(x);
}
}
в первом методе мы указали тип возвращаемой переменной, во втором нет. Вопрос почему?
0
JustinianJudge в Mega City OneMaster
5 апреля 2020, 15:20
Потому что джава должна контроллировать, чтобы не было так:
или
джава нам просто не даст это написать, поэтому рассматривай это как контракт метода.
Есть метод.
Он называется так.
Он должен вернуть вот такой тип.
Он принимает на вход такую очередность типов параметров.
Четко и конкретно.
второй метод ничего не возвращает, он просто что-то делает и уходит со сцены.
А первый метод содержит Set<Object> , и компилятор будет с хлыстом следить за программистом, чтобы его метод возвращал объект данного типа, если убрать return будет ошибка компиляции. Таким образом компилятор помогает программисту и уберегает его от ошибок.
Чем позже будет выявлена ошибка, тем в геометрической прогрессии сложнее/дороже для бизнеса ее устранение.
Возвращаемый тип позволяет компилятору не допускать этот вид ошибок на самой ранней стадии - на стадии написания кода.
0
ak
5 апреля 2020, 15:35
с невозвращаемыми метода вроде все понятно. он выполняет какое то условие. если где то вызовим его значит он отработает, если нет значит ничего не произойдет.
Тогда вопрос по методу мейн:
public static void main(String[] args) {
Set<Cat> cats = createCats(); // метод с return
Set<Dog> dogs = createDogs(); // метод с return
Set<Object> pets = join(cats, dogs); // метод с return
printPets(pets);
removeCats(pets, cats);
printPets(pets);
}
В методах creatCats, creatDogs, join мы создавали объекты и множества. Поэтому возвращали переменные множеств cats, dogs, pets ?
А в методах removeCats, printPets мы делали некие действия с этими множествами, поэтому сами методы невозвращаемые ?
0
ak
5 апреля 2020, 15:41
еще вопрос по самой фомулировке вызова методов:
Set<Cat> cats = createCats();
Set<Dog> dogs = createDogs();
Set<Object> pets = join(cats, dogs);
printPets(pets);
Почему creatCats, creatDogs, join вызываются черещ Set<Cat> cats, ...
а метод printPets через:
printPets(pets) ;?
Почему join не вызывали так:
join(cats, dogs); ?
0
JustinianJudge в Mega City OneMaster
5 апреля 2020, 16:06
да
что происходит:
1. createCats(); отрабатывает метод, возвращает сет котов
Set<Cat> cats = этот сет котов (с метода) идет в локальную переменную cats, чтобы мы могли потом с ним работать и обращаться к этому объекту дальше
2. Set<Dog> dogs = createDogs(); тоже самое
3.join(cats, dogs); мы вызываем метод джойн , передаем туда два объекта , получаем третий - объединенный сет, я так понимаю
Set<Object> pets = присваиваем этот сет переменной pets
4 printPets(pets) ;
передаем в метод принтПетс - наш сет результат.
Этот метод просто выводит на экран, он не возвращает никаких коллекций.
так можно написать. Внимательно подумай и ответь, а что в таком случае передавать в printCats()? Мы должны получить результат с метода, чтобы потом этим результатом оперировать. Поэтому и есть присвоения для методов, которые возвращают значения.
А от войдовских методов мы ничего не ожидаем получить, какой объект мы хотим получить с метода, который печатает переданную коллекцию? Никакой.
+1
ak
5 апреля 2020, 18:18
спасибо! у меня только сейчс начала появляться картинка скелета программы. вот и вопросы пошли))
т.е как я понял в методе main идет отработка команд. Главная задача метода main это включать нужные рычаги по списку чтоб реализовать задачу программы. Т.е main это мозг который дае команды рукам, ногам, рту, глазам и т.д.:
public static void main(String[] args) {
Set<Cat> cats = createCats(); // создаем множество cats и присваиваем ему множество из метода createCats()
Set<Dog> dogs = createDogs(); //создаем множество dogs и присваиваем ему множество из метода createDogs()
Set<Object> pets = join(cats, dogs);// создаем множество pets и присваиваем ему множество из метода join()
printPets(pets); // вызываем метод printPets
removeCats(pets, cats); // вызываем метод removeCats
printPets(pets); // вызываем снова метод printPets
}
0
JustinianJudge в Mega City OneMaster
5 апреля 2020, 18:48
да, только здесь дело не в методе мейн, а в том что по сути любой метод это набор вызовов других методов, которые вызывают свои методы, и уже там кто-то что-то делает.
Как структура управления в больших компаниях, где треть начальников и все друг другу поручают пока не доходят уже до конкретных работников.
Особенность метода мейн что это точка входа в программу, то есть это самый генеральный директор, начальник всех начальников, и от него уже пошла цепочка.
но это могло быть вполне вот так:
то есть, один метод должен делать какую-то свою одну функцию, если метод должен делать что-то сложное, это должен быть вызов методов, каждый из которых выполняет свою маленькую функцию.
Такой код легко править, такой код сложнее сломать - методы не зависят друг от друга, и тд.
А когда простыня в методе мейн на 100 строк с кучей циклов и ифов, то там уже колесо поменяешь, двигатель отвалиться
+3
ak
5 апреля 2020, 19:35
понял. очень понято и доступно!
0