Void и др.

Java Multithreading
9 уровень , 10 лекция
Открыта

— Привет, Амиго! И снова маленькая и интересная тема. Тип Void.

— А зачем может понадобиться такой тип? Ну, c void-то понятно. Чтобы привести к общему знаменателю функции и процедуры. Теперь у нас нет процедур, зато есть функции, которые возвращают void (ничего).

— Ага. А ты помнишь, недавно Элли тебе рассказывала про интерфейс-шаблон Callable?

— Ага.

— А что туда нужно передать в качестве типа-параметра тоже помнишь?

— Да, тип результата:

Пример задания, которое ничего не делает:
class EmptyJob implements Callable
{
 public String call() throws Exception
 {
  return null;
 }
}

— Ага. А если тебе нужно, чтобы метод call возвращал значение int? Как тогда?

— Теперь я знаю, что для этого есть autoboxing. Я просто передам Integer, и все будет работать как часы:

Пример задания, которое ничего не делает:
class EmptyJob implements Callable
{
 public Integer call() throws Exception
 {
  return null;
 }
}

— Отлично. А если метод ничего не должен возвращать?

— Я понял твою мысль. Тогда мы используем Void как аналог void?

— Ага.

— А не проще сделать просто Object и возвращать null.

— Иногда, но не всегда.

Ты знаешь, что там имелся в виду void, а ты написал Object, но другой программист может этого и не знать и будет думать, а почему это ты возвращаешь null.

Или код, вызывающий этот метод будет ожидать значения в качестве результата.

А когда написано Void то всем сразу понятно, что это – обертка над void, хотя возвращать null все же придётся.

Пример задания, которое ничего не делает:
class EmptyJob implements Callable
{
 public Void call() throws Exception
 {
  return null;
 }
}

— Гм. Действительно, метод, который всегда возвращает null, внушает некоторые сомнения. А метод, который объявлен Void, может это делать без лишних пояснений.

Читабельность кода — прежде всего. Мне нравится Java!

— Отлично. Рада, что тебе понравилось. На сегодня закончим.

Комментарии (53)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Мирослав Уровень 37 Expert
18 июня 2024
Почему-то строку — Я понял твою мысль. Тогда мы используем Void как аналог void? 3-е слово прочел как "мать" ))))
Zheleznyak Maxim Уровень 4
14 августа 2024
в 4ом слове
I'll kick them all Уровень 5
30 августа 2025
Нумерация с 0. Он же программист.
milniy87 Уровень 41
1 марта 2023
Void Callable — это функциональный интерфейс, который позволяет запускать поток, который выполняет некоторое задание и возвращает значение null. В отличие от интерфейса Runnable, который не возвращает значение. Использование Void Callable может быть предпочтительнее, если вам нужно выполнить операцию, которая может потенциально генерировать исключение, и вы хотите получить это исключение в основном потоке. В случае с Callable вы можете захватить исключение и обработать его, когда поток выполнения завершится. Кроме того, Callable возвращает Future, который позволяет контролировать и управлять выполнением задания, а также получать результат выполнения, когда это будет необходимо. В целом, если вам нужно выполнить простое задание без возвращаемого значения, можно использовать Runnable. Если же вам нужно выполнить задание, которое может генерировать исключения и/или возвращать значение, то лучше использовать Callable.
Михаил Уровень 32
11 февраля 2023
К сожалению ни одного примера где бы потребовалось эта штука. Не объяснено зачем Void Callable, возвращающий null. Чем он лучше Runnable? Делаю предположение, что это нужно в случаях, когда Runnable неуместен. Так себе догадка...
Василий Чи Уровень 51
6 января 2023
Теперь официально взяли чёрную материю за пустоту)
апецт Уровень 14
8 декабря 2022
когда-то в офисе Oracle: -Давайте добавим интерфейс Callable, это будет как Runnable только еще можно будет получить результат работы -Хорошая идея, но что если у нас нет результата? -Так есть же Runnable -Правильно, создадим класс Void и будем возвращать null
Lyokha Blagodatskikh Уровень 48
13 января 2023
Тоже подумал, если ничего не нужно возвращать, то есть Runnable. Зачем придумывать Void для Callable ещё и null возвращать, если есть Runnable?
YahveSmerciful Уровень 43 Expert
8 февраля 2023
аххаха
Мишаня Уровень 31
8 сентября 2022
У меня стойкая ассоциация типа void с космическими темами например Войд Волопаса Кстати, отличные видосики про космос, чтобы про них сладко засыпать, мечтая стать настоящим Java Developer
Igor Petrashevsky Уровень 47
2 августа 2022
типа абстракционизм . джава разочарование , конечно. вся такая синтаксично сахарная, а файл в переменную без огорода не прочтешь.
Sm1le84 Уровень 6 Student
9 июля 2022
Что значит вообще "возвращать"?
29 ноября 2022
Кто ты, Воин?
Kurama Уровень 50
2 декабря 2022
Ахах, я сначала такой: чее, это ж элементарно... А потом задумался, как бы правильно и красиво растолковать это слово в нужном контексте Намного проще было бы объяснить разве что "возвращать что-то", а не само слово "возвращать" "Возвращать" же от слова return, значит объяснение не требуется? Возвращать - это передача результата метода вызвавшему её полю (хз, какое последнее слово)
Jh-007 Уровень 12
4 мая 2021
Небольшое дополнение, может кому-то будет интересно. В Паскале были отдельно процедуры, которые ничего не возвращали, и функции, которые возвращали результат. В С оставили только функции. Ну а дальше всё понятно С-> C++ -> Java.
20 апреля 2021
если я хочу чтото вернуть, то как везде принято объявлю функцию int 0 = ок 1 и более = error все информативнее чем null, по производительности будет быстрее и исключения можно пробросить, а так хрень костыльная.
Игорь Уровень 41
19 июня 2021
В си помоему так везде, даже в printf, но в язык более высокого уровня лучше кинуть исключение, не зря же в Java не int main, а void main