Непонятная конструкция в объектах

146
24 сентября 2019, 16:00

Начал не так давно изучать язык JAVA. Просматривая разные туториалы и примеры программ, неоднократно сталкиваюсь с непонятными для меня конструкциями. Нигде не могу найти объяснение такого кода.

Подскажите в какую сторону копать или хотя-бы как это называется? В настоящее время я вижу это, как мы создаем объект и передаем в его конструктор другой объект, в котором мы вызываем метод.

BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
BufferedWriter out = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
Answer 1

Так и есть, при создании объекта в конструктор могут передаваться другие объекты, в Java это обычное дело. В данном случае происходит следующее:

  1. У класса Socket есть метод getInputStream(), который возвращает объект типа InputStream.
  2. У класса InputSteamReader есть конструктор, который принимает в качестве параметра объект типа InputStream, а мы его уже создали в п.1 и передаём туда.
  3. У класса BufferedReader есть конструктор, который также принимает в качестве параметра объект типа Reader, а у нас уже в п.2 создан его потомок - InputSteamReader. В общем получается как бы "матрешка", где создание объекта происходит непосредственно в самом конструкторе другого объекта. Можно, конечно, создавать объекты отдельно, присваивая их ссылочным переменным соответствующего типа, но так получается больше кода.
Answer 2
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));

можно написать

Stream stream = socket.getInputStream();
InputStreamReader reader = new InputStreamReader(stream);
BufferedReader in = new BufferedReader(reader);

Тогда Вы увидите, что утверждение

передаем в его конструктор другой объект, в котором мы вызываем метод

неверно.

READ ALSO
Insert Into SQLite

Insert Into SQLite

я добавляю значение в таблицу с помощью INSERT INTO USERS

170
Проблема с ConstraintLayout в Android

Проблема с ConstraintLayout в Android

Постараюсь вкратце описать сложившуюся ситуациюКаковы исходные данные? Представим себе довольно-таки простенький макет, корневым элементом...

158
Исключение IOException в классе для работы c Bluetooth

Исключение IOException в классе для работы c Bluetooth

Всем приветПишу класс для работы с Bluetooth

153
Работа WebSocket в Java (spring и android)

Работа WebSocket в Java (spring и android)

Никак не могу понять, как реализовывать сокеты на java на клиентеЕсть несколько проблем:

126