Co zwrócić, jeśli Typ zwrotu metody jest nieważny? (Nie void!)

Ze względu na użycie generyków w Javie musiałem zaimplementować funkcję Void jako typ zwracany:

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

I kompilator żąda, abym zwrócił coś . Na razie tylko wracam null, ale zastanawiam się, czy to dobra praktyka kodowania...

Ja też próbowałem Void.class, void, Void.TYPE, new Void(), nie ma powrotu, ale to wszystko nie działa. (Z mniej lub bardziej oczywistych powodów) (Zobacz ta odpowiedź Po szczegóły)

  • więc co mam zwrócić, jeśli zwracanym typem funkcji jest Void?
  • jakie jest ogólne zastosowanie klasy Void?

EDIT: żeby oszczędzić Ci minusów: pytam o V oid, a nie void. Klasa Void, Nie zarezerwowane słowo kluczowe void.

Author: Community, 2009-03-24

5 answers

Więc co mam zwrócić, jeśli zwracany typ funkcji ma być Void?

Użyj return null. Void nie można utworzyć instancji i jest jedynie symbolem zastępczym dla Class<T> typu void.

Jaki jest sens Void?

Jak wspomniano powyżej, jest to Element Zastępczy. Void jest tym, co otrzymasz, jeśli na przykład użyjesz reflection, aby spojrzeć na metodę z typem powrotu void. (Technicznie, dostaniesz z powrotem Class<Void>.) Ma inne różne używa wzdłuż tych linii, na przykład jeśli chcesz sparametryzować Callable<T>.

Ze względu na użycie generyków w Javie musiałem zaimplementować tę funkcję

Powiedziałbym, że coś może być dziwne z Twoim API, jeśli potrzebujesz zaimplementować metodę z tym podpisem. Zastanów się dokładnie, czy istnieje lepszy sposób na zrobienie tego, co chcesz (być może możesz podać więcej szczegółów w innym, kolejnym pytaniu?). Jestem trochę podejrzliwy, ponieważ to wyszło tylko " ze względu na stosowanie leków generycznych".

 100
Author: John Feminella,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-26 01:54:45

Nie ma sposobu na utworzenie Pustki, więc jedyną rzeczą, którą Możesz Zwrócić jest null.

 23
Author: Jon Bright,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-03-24 09:39:35

return null to jest droga.

 18
Author: Bombe,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-03-24 09:36:44

Aby wyjaśnić, dlaczego inne sugestie, które podałeś, nie działają:

Void.class i Void.TYPE wskazują na ten sam obiekt i są typu Class<Void>, a nie Void.

Dlatego nie możesz zwrócić tych wartości. new Void() będzie Typu Void, ale ten konstruktor nie istnieje. W rzeczywistości Void nie ma publicznych konstruktorów, więc nie można utworzyć instancji: nigdy nie można mieć żadnego obiektu typu Void z wyjątkiem polimorficznego null.

Mam nadzieję, że to pomoże! :-)
 17
Author: Martijn,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-06-03 10:38:18

Jeśli, z niejasnych powodów, musisz użyć tego typu, to rzeczywiście zwracanie null wydaje się rozsądną opcją, ponieważ przypuszczam, że return value i tak nie będzie używana.
Kompilator i tak zmusi cię do zwrócenia czegoś.
I ta klasa nie wydaje się mieć publicznego konstruktora, więc nowa Void() nie jest możliwa.

 0
Author: PhiLho,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-03-24 09:38:19