Класс-это необработанный тип. Ссылки на класс универсального типа должны быть параметризованы
у меня есть следующий класс (из простого весеннего урока)
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
класс с весны 2.5.
метод supports показывает предупреждение (класс является необработанным типом. Ссылки на класс универсального типа должны быть параметризованы), если я попытаюсь добавить к этому такие параметры, как
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
!
2 ответа:
интерфейс объявляет метод с необработанным типом. В этом случае вы не можете переопределить его красиво, не имея предупреждения.
источником вашей проблемы является то, что интерфейс Spring был объявлен совместимым с Java 1.4. Обратите внимание, что Spring 3.0 должен поставлять все классы как совместимые с Java 1.5, так что это исправит вашу проблему. Перед обновлением, я думаю, вам придется жить с предупреждением или
@SuppressWarning
.
поскольку интерфейс заставляет вас использовать необработанный тип (т. е. не позволяет указать правильную информацию о типе), вы не можете реализовать его без предупреждений, если не используете
@SupressWarnings
.единственное реальное исправление-это исправить интерфейс (т. е. сделать его определить
boolean supports(Class<?> aClass)
).