Buscando una manera limpia de manejar errores en RxJava

Estoy aprendiendo RxJava y he visto en muchos lugares que un error puede manejarse de esta manera:

repository.getById(10).subscribe(new Action1<User>() {
            @Override
            public void call(User user) {
              //Do something
            }
        }, new Action1<Throwable>() {
            @Override
            public void call(Throwable t) {
                if (t instanceof FirstErrorException) {
                    handleFirstError((FirstErrorException) t);
                } else if (t instanceof FirstErrorException) {
                    handleSecondError((SecondErrorException) t);
                } else {
                    //and so on... 
                }
            }
        });

¿Soy el único que piensa que este es un código realmente malo? ¿Cómo puedo mejorarlo? Pensé usandoVisitor patrón que "visita" cada tipo concreto de mi excepción base, peroonError método siempre requiere unAction1<Throwable>; no puedes usar tu propia excepción base, soloThrowable.

Respuestas a la pregunta(1)

Su respuesta a la pregunta