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
.
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".
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.
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.
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
.
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.
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