Подтвердить что ты не робот

Класс является сырым типом. Ссылки на общий тип 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!

4b9b3361

Ответ 1

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

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

Ответ 2

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

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