Исключения являются хорошим способом обработки непредвиденных событий в потоке приложения. RuntimeException не проверяется компилятором, но вы можете предпочесть использовать исключения, расширяющие класс исключений, для управления поведением ваших API-клиентов, поскольку они необходимы для отлова ошибок для их компиляции. Также формирует хорошую документацию.
Если вы хотите добиться чистого интерфейса, используйте наследование для подкласса различных типов исключений, которые есть в вашем приложении, а затем предоставьте родительское исключение.