Что я могу вернуть, если возвращаемый тип метода является Void? (Не пусто!)

Из-за использования Generics в Java мне пришлось реализовать функцию с Void как возвращаемый тип:

public Void doSomething() {
    //...
}

и компилятор требует, чтобы я что-то возвращал. На данный момент я просто возвращаю null, но мне интересно, хорошая практика кодирования...

Я также пробовал Void.class, Void, Void.TYPE, new Void(), никакого возврата вообще, но все это не работает вообще. (По более или менее очевидным причинам) (подробнее см. этот ответ)

  • Так что я должен возвращать, если возвращаемый тип функции Void?
  • Какое общее использование класса Void?

РЕДАКТИРОВАТЬ: Просто чтобы избавить вас от downvotes: я спрашиваю о V oid, а не о v. Класс Void, не зарезервированное ключевое слово Void.

Ответ 1

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

Используйте return null. Void не может быть создан и является просто заполнителем для типа Class<T> Void.

Какая точка Void?

Как отмечено выше, это местозаполнитель. Void - это то, что вы получите, если вы, например, используете отражение, чтобы посмотреть на метод с типом возврата Void. (Технически вы вернетесь Class<Void>.) Он имеет другие различные виды использования в этих строках, например, если вы хотите параметризовать Callable<T>.

Из-за использования дженериков в Java я оказался в необходимости реализовать эту функцию

Я бы сказал, что что-то может быть забавным с вашим API, если вам нужно реализовать метод с этой подписью. Внимательно изучите, есть ли лучший способ сделать то, что вы хотите (возможно, вы можете предоставить более подробную информацию в другом, последующем вопросе?). Я немного подозрительный, так как это только появилось "из-за использования дженериков".

Ответ 2

Невозможно создать экземпляр Пустоты, поэтому единственное, что вы можете вернуть, - null.

Ответ 3

return null - путь.

Ответ 4

Чтобы понять, почему другие предложенные вами предложения не работают:

Void.class и Void.TYPE указывают на один и тот же объект и имеют тип Class<Void>, а не Void.

Вот почему вы не можете вернуть эти значения. new Void() будет иметь тип Void, но этот конструктор не существует. Фактически, Void не имеет общих конструкторов и поэтому не может быть создан: у вас никогда не может быть объекта типа Void, кроме полиморфного null.

Надеюсь, это поможет!: -)

Ответ 5

Если по неясным причинам вы ДОЛЖНЫ использовать этот тип, то, действительно, возврат null кажется разумным вариантом, так как я полагаю, что возвращаемое значение не будет использоваться в любом случае. Компилятор заставит вас что-то вернуть. И этот класс, похоже, не имеет открытого конструктора, поэтому новый Void() невозможен.