significa que pointer mac inicia impresionsubusuariocontroller gratis estado error descargar java generics void

java - que - ¿Qué devuelvo si el tipo de devolución de un método es nulo?(¡No está vacío!)



que significa java lang exception (5)

Debido al uso de Generics en Java, terminé teniendo que implementar una función que tenía Void como tipo de devolución:

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

y el compilador exige que devuelva algo . Por ahora estoy volviendo null , pero me pregunto si esa es una buena práctica de codificación ...

También probé Void.class , void , Void.TYPE , new Void() , sin retorno, pero todo eso no funciona en absoluto. (Por razones más o menos obvias) (Vea esta respuesta para más detalles)

  • Entonces, ¿qué se supone que debo devolver si el tipo de devolución de una función es Void ?
  • ¿Cuál es el uso general de la clase Void ?

EDITAR: Solo para ahorrarles los votos a favor: les pregunto sobre V oid, no v oid. La clase Void , no la palabra reservada void .


Entonces, ¿qué se supone que debo devolver si el tipo de devolución de una función tiene que ser Void ?

Use return null . Void no puede crearse una instancia y es simplemente un marcador de posición para el tipo de void Class<T> .

¿Cuál es el punto de Void ?

Como se señaló anteriormente, es un marcador de posición. Void es lo que obtendrás si, por ejemplo, usas la reflexión para ver un método con un tipo de void devuelto. (Técnicamente, obtendrá Class<Void> .) Tiene otros usos variados 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

Diría que algo puede ser funky con tu API si necesitas implementar un método con esta firma. Considere cuidadosamente si hay una mejor manera de hacer lo que desea (¿quizás puede proporcionar más detalles en una pregunta de seguimiento diferente?). Soy un poco sospechoso, ya que esto solo surgió "debido al uso de genéricos".


No hay forma de instanciar un Void, por lo que lo único que puede devolver es nulo.


Para aclarar por qué las otras sugerencias que dio no funcionan:

Void.class y Void.TYPE apuntan al mismo objeto y son del tipo Class<Void> , no de Void .

Es por eso que no puedes 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 se puede crear una instancia: nunca se puede tener ningún objeto de tipo Void excepto el null polimórfico.

¡Espero que esto ayude! :-)


Si, por razones oscuras, DEBE usar este tipo, entonces, de hecho, devolver nulo parece ser una opción sensata, ya que supongo que el valor de retorno no se utilizará 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 no es posible el nuevo Void ().


return null es el camino a seguir.