Класс является сырым типом. Ссылки на общий тип Class <T> должны быть параметризованы
У меня есть следующий класс (из простого учебника Spring)
public class CarValidator implements Validator {
public boolean supports(Class aClass) {
return Car.class.equals(aClass);
}
public void validate(Object obj, Errors errors) {
Car car = (Car) obj;
ValidationUtils.rejectIfEmptyOrWhitespace(errors, "model", "field.required", "Required field");
ValidationUtils.rejectIfEmptyOrWhitespace(errors, "price", "field.required", "Required field");
if( ! errors.hasFieldErrors("price")) {
if (car.getPrice().intValue() == 0) {
errors.rejectValue("price", "not_zero", "Can't be free!");
}
}
}
}
Если класс Validator является классом org.springframework.validation.Validator
из Spring 2.5.
Метод поддержки показывает предупреждение (класс является сырым типом. Ссылки на общий тип Class должны быть параметризованы), если я пытаюсь добавить к нему такие параметры, как
public boolean supports(Class<?> aClass) ...
Я получаю следующую ошибку:
The method supports(Class<?>) of type CarValidator has the same erasure as supports(Class) of type Validator but does not override it
Есть много потоков по этому типу вопросов, но я хочу получить полный ответ и фактически понять его, не "скрывая" проблему с помощью @SupressWarnings
!
Ответы
Ответ 1
Интерфейс объявляет метод с необработанным типом. В этом случае вы не можете переопределить его без предупреждения.
Происхождение вашей проблемы заключается в том, что интерфейс Spring был объявлен совместимым с Java 1.4.
Обратите внимание, что Spring 3.0 должен предоставлять все классы в качестве совместимого с Java 1.5, чтобы устранить вашу проблему. Перед обновлением, я думаю, вам придется жить либо с предупреждением, либо с @SuppressWarning
.
Ответ 2
Поскольку интерфейс заставляет вас использовать необработанный тип (т.е. не позволяет указать правильную информацию о типе), вы не можете реализовать его без предупреждений, если вы не используете @SupressWarnings
.
Единственное реальное решение - исправить интерфейс (т.е. определить его boolean supports(Class<?> aClass)
).