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