Класс-это необработанный тип. Ссылки на класс универсального типа должны быть параметризованы


у меня есть следующий класс (из простого весеннего урока)

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 62

2 ответа:

интерфейс объявляет метод с необработанным типом. В этом случае вы не можете переопределить его красиво, не имея предупреждения.

источником вашей проблемы является то, что интерфейс Spring был объявлен совместимым с Java 1.4. Обратите внимание, что Spring 3.0 должен поставлять все классы как совместимые с Java 1.5, так что это исправит вашу проблему. Перед обновлением, я думаю, вам придется жить с предупреждением или @SuppressWarning.

поскольку интерфейс заставляет вас использовать необработанный тип (т. е. не позволяет указать правильную информацию о типе), вы не можете реализовать его без предупреждений, если не используете @SupressWarnings.

единственное реальное исправление-это исправить интерфейс (т. е. сделать его определить boolean supports(Class<?> aClass)).