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.