Что я могу вернуть, если возвращаемый тип метода является 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() невозможен.