Разрешение перегрузки метода выполняется во время компиляции, когда известен только тип времени компиляции.Следовательно, тип времени компиляции параметров, передаваемых в вызов метода, определяет, какой из перегруженных методов выбран.
Поскольку вы передаете элементы List<ObjectError>
в вызов метода, String getMessage(final ObjectError objectError)
всегдавыбран, и тип времени выполнения экземпляров, хранящихся в этом List
, не имеет значения.
Один из способов решения вашей проблемы - переместить метод getMessage()
в класс ObjectError
и переопределитьэто в подклассе FieldError
.
Вместо
getMessage(errors.get(0))
вы будете вызывать
errors.get(0).getMessage()
Это будет работать, поскольку переопределение метода разрешается вво время выполнения.