Tengo un método que se supone que debe devolver un objeto si éste se encuentra.
Si no se encuentra, debería:
- devolver null
- lanzar una excepción
- otros
Tengo un método que se supone que debe devolver un objeto si éste se encuentra.
Si no se encuentra, debería:
Si siempre estás esperando para encontrar un valor, a continuación, tire de la excepción si es que faltan. La excepción podría significar que hay un problema.
Si el valor pueden estar ausentes o presentes y ambos son válidos para la aplicación de la lógica, a continuación, devolver un valor null.
Más importante: Qué hacer en otros lugares en el código? La consistencia es importante.
Como regla general, si el método debe devolver siempre un objeto, y luego ir con la excepción. Si usted anticipa el ocasional nulo y desean hacerlo de una manera determinada, vaya con el valor null.
Hagas lo que hagas, yo aconsejo vivamente en contra de la tercera opción: devuelve una cadena que dice "WTF".
Si es null nunca indica un error entonces, retorna null.
Si es null es siempre un error, a continuación, lanzar una excepción.
Si es null a veces es una excepción, a continuación, el código de dos rutinas. Una rutina lanza una excepción, y el otro es un booleano prueba de rutina que devuelve el objeto en un parámetro de salida y la rutina devuelve un false si no se encontró el objeto.
Es difícil el uso indebido de un intento de rutina. Es muy fácil olvidarse de comprobar el valor null.
Así que cuando nulo es un error que acaba de escribir
object o = FindObject();
Cuando el valor null no es un error que se puede codificar algo como
if (TryFindObject(out object o)
// Do something with o
else
// o was not found
Yo sólo quería una recapitulación de las opciones mencionadas antes, lanzar algunos nuevos en:
O usted puede combinar estas opciones:
Ofrecer varias versiones sobrecargadas de su getter, por lo que el usuario puede decidir qué camino seguir. En la mayoría de los casos, sólo el primero tiene una implementación del algoritmo de búsqueda, y los demás sólo se envuelven alrededor de la primera:
Object findObjectOrNull(String key);
Object findObjectOrThrow(String key) throws SomeException;
Object findObjectOrCreate(String key, SomeClass dataNeededToCreateNewObject);
Object findObjectOrDefault(String key, Object defaultReturnValue);
Incluso si usted elige proporcionar sólo una aplicación, puede que usted quiera usar una convención de nomenclatura como que aclarar su contrato, y ayuda en caso de que decida añadir otras implementaciones.
Usted no debe demasiado, pero puede ser útil, espeacially la hora de escribir una Clase auxiliar que se utiliza en cientos de aplicaciones diferentes con diferentes error en el manejo de las convenciones.
Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.