Зачем нужен класс Void?

229
15 декабря 2017, 03:15

Зачем в Java нужен класс java.lang.Void?

Answer 1

void.class == Void.TYPE вернет true - таким образом, в большинстве случаев (например, если нужно через рефлексию проверить возвращаемый тип метода) можно (и, на мой взгляд, стоит) использовать void.class - яснее и ненароком не перепутаешь с Void.class. Так что использовать его можно, например, в случаях, когда у вас есть обобщенный класс и вы хотите, чтобы метод ничего не возвращал (т.е. чтобы пользователь класса не ожидал ничего особенного оттуда получить):

interface I<T> {
    T doStuff();
}
class A implements I<Void> {
    @Override
    public Void doStuff() {
        // ...
        return null; // ничего другого вернуть нельзя (если не хитрить с рефлексией, конечно)
    }
}

UPD. Например, если в проекте регулярно используется Callable<t> для выполнения каких-то асинхронных задач и не хочется мешать его со Thread в тех ситуациях, когда результат работы задачи ничего не должен возвращать, можно реализовать Callable<Void>.

Answer 2

Класс Void - это неинстанциируемый класс-плейсхолдер, содержащий ссылку на Class-объект для ключевого слова void.

Источник: http://download.oracle.com/javase/1.4.2/docs/api/java/lang/Void.html

The Void class is an uninstantiable placeholder class to hold a reference to the Class object representing the Java keyword void.

READ ALSO
Фильтр сервлета. Порядок вызова без web.xml

Фильтр сервлета. Порядок вызова без web.xml

Каким параметром можно установить порядок вызовов сервлетных фильтров, не применяя webxml, spring и т

226
Можно ли задать время жизни очереди в java?

Можно ли задать время жизни очереди в java?

Хочу, чтобы моя BlockingQueue жила определенное время (хранится она в синглтоне)То есть, если никто не пришел за данными в очереди в течении какого...

267
В vaadin как добавить pdf файл [требует правки]

В vaadin как добавить pdf файл [требует правки]

Как добавить pdf файл в vaadin ?

207
Java: System.out.println и System.err.println путаются в выводе

Java: System.out.println и System.err.println путаются в выводе

Есть задача: с помощью команд Systemout

225