¿Qué devuelvo si el tipo de retorno de un método es Nulo? (No vacío!)
Debido al uso de Genéricos en Java, terminé teniendo que implementar una función que tenía Void
como tipo de retorno:
public Void doSomething() {
//...
}
Y el compilador exige que devuelva algo. Por ahora solo estoy regresando null
, pero me pregunto si eso es una buena práctica de codificación...
También he intentado Void.class
, void
, Void.TYPE
, new Void()
, no hay retorno en absoluto, pero todo eso no funciona en absoluto. (Por razones más o menos obvias) (Ver esta respuesta para más detalles)
- So ¿qué se supone que debo devolver si el tipo de retorno de una función es
Void
? - ¿Cuál es el uso general de la clase
Void
?
EDIT: Solo para repuesto el downvotes: estoy preguntando sobre Void, no void. La clase Void
, no la palabra clave reservada void
.
5 answers
Entonces, ¿qué se supone que debo devolver si el tipo de retorno de una función tiene que ser
Void
?
Use return null
. Void
no puede ser instanciado y es simplemente un marcador de posición para el tipo Class<T>
de void
.
¿Cuál es el punto de
Void
?
Como se señaló anteriormente, es un marcador de posición. Void
es lo que obtendrá si, por ejemplo, usa reflexión para mirar un método con un tipo de retorno de void
. (Técnicamente, volverás Class<Void>
.) Tiene otros surtidos utiliza a lo largo de estas líneas, como si desea parametrizar un Callable<T>
.
Debido al uso de genéricos en Java terminé teniendo que implementar esta función
Yo diría que algo puede ser funky con su API si necesita implementar un método con esta firma. Considere cuidadosamente si hay una mejor manera de hacer lo que desea (¿tal vez pueda proporcionar más detalles en una pregunta de seguimiento diferente?). Soy un poco sospechoso, ya que esto solo surgió " debido a the use of generics".
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-08-26 01:54:45
No hay forma de crear una instancia de un Void, por lo que lo único que puede devolver es null.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-03-24 09:39:35
return null
es el camino a seguir.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-03-24 09:36:44
Para aclarar por qué las otras sugerencias que diste no funcionan:
Void.class
y Void.TYPE
apuntan al mismo objeto y son de tipo Class<Void>
, no de Void
.
Es por eso que no puede devolver esos valores. new Void()
sería de tipo Void
pero ese constructor no existe. De hecho, Void
no tiene constructores públicos y, por lo tanto, no puede ser instanciado: Nunca puede tener ningún objeto de tipo Void
excepto el polimórfico null
.
Espero que esto ayude! :-)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-06-03 10:38:18
Si, por razones oscuras, debe usar este tipo, entonces devolver null parece ser una opción sensata, ya que supongo que el valor devuelto no se usará de todos modos.
El compilador te obligará a devolver algo de todos modos.
Y esta clase no parece tener un constructor público por lo que new Void () no es posible.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-03-24 09:38:19