Я работаю над большой базой кода, написанной на 90% в Java и 10% в Groovy. Я только недавно начал изучать Groovy и хотел бы получить некоторые советы. Я получил такой код в методе Groovy:GroovyRuntimeException: Перегрузка неоднозначных методов
throw new RuntimeException(getErrorMessage(state));
Это работает большую часть времени. Проблема в том, что в этом очень редком случае getErrorMessage(state)
вернул null вместо строки. Я не могу изменить реализацию getErrorMessage()
.
я могу решить эту конкретную проблему так:
throw new RuntimeException((String) getErrorMessage(state));
или вроде этого:
throw new RuntimeException(getErrorMessage(state) ?: '(no detail available)');
Этот вопрос не возник бы, если бы я использовал @CompileStatic
, но есть и другие части кода, полагаться на динамические функции.
Моя проблема заключается в том, что я могу только исправить такие проблемы, столкнувшись с ними в результате отчета об ошибке, что не очень хорошо для надежности и репутации приложения. (Также проблема связана не только с getErrorMessage
, но и со всеми возможными ситуациями, при которых может возникать неоднозначное исключение перегрузки во время выполнения.)
Как я могу заранее предусмотреть такие проблемы? (В настоящее время доступны инструменты статического анализа, кажется, не достаточно умен, чтобы поймать это.)
Спасибо, но моя проблема связана не только с 'getErrorMessage'. Этот метод является лишь одним из бесчисленных методов, которые иногда могут возвращать значение null. Я ищу способ найти все вхождения кода, которые могут привести к двусмысленному вызову метода. –
Если проблема заключается в том, что Groovy решает во время выполнения перегруженный метод, вы можете «поймать» любой «нуль», добавив перегруженный метод с помощью Object. Groovy вызовет этот метод, когда аргумент равен «null». –