Что я возвращаю, если возвращаемый тип метода является Void? (Не пустота!)
из-за использования дженериков в Java мне пришлось реализовать функцию, имеющую Void
в качестве возвращаемого типа:
public Void doSomething() {
//...
}
и компилятор требует, чтобы я вернулся что-то. А сейчас я просто возвращаюсь null
, но мне интересно, если это хорошая практика кодирования...
Я тоже пробовал Void.class
,void
,Void.TYPE
,new Void()
, нет возврата вообще, но все это не работает вообще. (По более или менее очевидным причинам) (см. этот ответ дополнительные сведения)
- так что я должен вернуть, если возвращаемый тип функции
Void
? - каково общее использование
Void
класса?
EDIT: просто чтобы избавить вас от downvotes: я спрашиваю о Vидентификатор объекта, а не void. Класс Void
,не зарезервированное ключевое слово void
.
5 ответов:
так что я должен вернуться, если возвращаемый тип функции должен быть
Void
?использовать
return null
.Void
не может быть создан экземпляр и является просто заполнителем дляClass<T>
типаvoid
.какой смысл
Void
?как отмечалось выше, это заполнитель.
Void
Это то, что вы получите обратно, если вы, например, используете отражение, чтобы посмотреть на метод с возвращаемым типомvoid
. (Технически, вы вернетесьClass<Void>
.) Он имеет другие различные виды использования по этим линиям, например, если вы хотите параметризовать aCallable<T>
.из-за использования дженериков в Java мне пришлось реализовать эту функцию
Я бы сказал, что что-то может быть фанки с вашим API, если вам нужно реализовать метод с этой сигнатурой. Внимательно рассмотрите, есть ли лучший способ сделать то, что вы хотите (возможно, вы можете предоставить более подробную информацию в другой, последующий вопрос?). Я немного подозрителен, так как это произошло только "из-за использования дженериков".
нет никакого способа создать экземпляр пустоты, так что единственное, что вы can return имеет значение null.
чтобы понять, почему другие предложения, которые вы дали, не работают:
Void.class
иVoid.TYPE
указывают на один и тот же объект и имеют типClass<Void>
, а неVoid
.вот почему вы не можете вернуть эти ценности.
new Void()
будет типаVoid
но этот конструктор не существует. На самом деле,Void
не имеет публичных конструкторов и поэтому не может быть создан экземпляр: у вас никогда не может быть объекта типаVoid
за исключением полиморфныхnull
.Надежда это помогает! : -)
Если по неясным причинам вы должны использовать этот тип, то действительно возвращение null кажется разумным вариантом, так как я полагаю, что возвращаемое значение не будет использоваться в любом случае.
Компилятор заставит вас вернуть что-то в любом случае.
И этот класс, похоже, не имеет публичного конструктора, поэтому новый Void() невозможен.