Применение Java Void Reference Type: детальный разбор

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Ссылочный тип Void в Java – это объектный аналог примитивного типа void. Его часто используют как заглушку в случае работы с обобщенными типами, когда нет необходимости возвращать значение. Например, Void используется в обобщенных типах, как в выражении Callable<Void>, когда задача выполняется, но не возвращает никакого результата.

Java
Скопировать код
ExecutorService executor = Executors.newSingleThreadExecutor();
executor.submit(() -> {
    // Код выполняется, но ничего не возвращает
    return null;
});
Кинга Идем в IT: пошаговый план для смены профессии

Использование рефлексии: void в сравнении с Void

В рефлексии класс Void.TYPE представляет объект, соответствующий примитивному типу void. Это позволяет определить, действительно ли метод возвращает void.

Java
Скопировать код
Method method = MyClass.class.getMethod("methodName");
if (method.getReturnType().equals(Void.TYPE)) {
    // Метод не возвращает значение.
}

Ограничения обобщённых типов: использование Void как заглушки

При проектировании API и интерфейсов с использованием обобщённых типов Void удобно использовать для обозначения классов, методы которых не предполагают возврат данных.

Java
Скопировать код
Map<String, Void> keysWithNoValues = new HashMap<>();
// Карта без значений, только ключи.
keysWithNoValues.put("KeyA", null);
// ...

Конкурентное программирование

В асинхронном программировании используется Future<Void>, важной является сама подготовка к выполнению задачи, а не возвращаемый результат.

Java
Скопировать код
Future<Void> future = executor.submit(() -> {
    // Выполнение задачи занимает длительное время
    return null;
});

Визуализация

Void можно интерпретировать как пустую коробку, которую можно передать в функцию.

Markdown
Скопировать код
Void emptyBox = null; // Пустая коробка 📦

Она может быть тихой посылкой:

Markdown
Скопировать код
Function<Void, Void> doNothingFunc = (Void v) -> {
    // Принимаем пустую коробку, возвращаем пустую
    return v;
};

Использование Void для выполнения задачи, не возвращающей значение:

Markdown
Скопировать код
Callable<Void> silentTask = () -> {
    // Действие выполняется, результат не возвращается
    return null; // Возвращается пустая коробка 📦
};

Продвинутые сценарии использования Void

Вспомогательные классы, не предназначенные для создания экземпляров

Void может служить индикатором того, что классы, такие как System и Math, не предназначены для создания экземпляров.

Указание null в интерфейсах безопасности

Используя системные интерфейсы безопасности, такие как java.security.PrivilegedAction, Void может обозначать действие, не возвращающее значение.

Обобщенные типы и типобезопасность

Void используется в обобщенных типах в качестве заполнителя типа, когда возвращать данные не требуется. Это способствует поддержанию типовой безопасности.

Полезные материалы

  1. Void (Java Platform SE 8) – официальная документация
  2. Джошуа Блох, "Эффективное использование Java", 3-е издание
  3. Ссылки на методы (Учебные руководства по Java™)
  4. Использование рефлексии и Void.TYPE
  5. Обобщенные типы в Java и заполнители типов