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

StackOverflow https://stackoverflow.com/questions/676663

  •  21-08-2019
  •  | 
  •  

Вопрос

Из-за использования дженериков в Java мне пришлось реализовать функцию, имеющую Void в качестве типа возврата:

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

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

я спрашиваю о В‌оид, не в‌оид.Класс Void, нет зарезервированное ключевое слово void.

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

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

Решение

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

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

Какой смысл Void?

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

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

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

Другие советы

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

return null это путь.

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

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

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

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

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

именно так.

public Class TestClass {
    public void testMethod () {
        return;
    }
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top