Lanzar una excepción o retorno nulo

Si tengo la función de abajo, con dos opciones.

private MyObject findBlank() {
    for (int i = 0; i < pieces.length; i++) {
        if(pieces[i].isBlank()){
            return pieces[i];
        }
    }
    return null;
}

private MyObject findBlank() {
    for (int i = 0; i < pieces.length; i++) {
        if(pieces[i].isBlank()){
            return pieces[i];
        }
    }
    throw new NoSuchFieldError("No blank piece found!");
}

De este método sé quesiempre debe devolver un objeto una de las 'piezas' siempre esisBlank() == true , el retorno nulo al final es solo para complacer al compilador. Dado que este es el caso y mi código no funcionaría de todos modos si devolviera un valor nulo, ¿es correcto, por favor, lanzar una excepción?

Mis opciones son:

devuelve nulo y la aplicación obtendrá una NullPointerException en algún caso de ventajadevuelve null y envuelve el uso del método con (myObject! = null) chequeslanzar una excepción que lo hará estallar en tiempo de ejecución

Supongo que lo que estoy preguntando es si este es el lugar correcto para lanzar una excepción. es decir, no hay nada que pueda hacer al respecto si entra en la situación. ¿Se clasifica como "excepcional" o debo anular lo que devuelve mi método (lo que hace que mi código se vea horrible)? Si sé que no debería devolver el valor nulo, debería lanzar la excepción, ¿no?

Además, ¿cómo elegiré qué excepción, o extenderé una y lanzaré la mía?

Respuestas a la pregunta(9)

Su respuesta a la pregunta