UFO ET IT

클래스는 원시 유형입니다.

ufoet 2020. 11. 28. 13:18
반응형

클래스는 원시 유형입니다. 제네릭 유형 클래스에 대한 참조 매개 변수화되어야 함


다음 클래스가 있습니다 (간단한 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.ValidatorSpring 2.5 클래스입니다.

다음과 같은 매개 변수를 추가하려고하면 supports 메소드가 경고를 표시합니다 (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!


인터페이스는 원시 유형으로 메소드를 선언합니다. 이 경우 경고없이 멋지게 재정의 할 수 없습니다.

문제의 원인은 Spring 인터페이스가 Java 1.4 호환으로 선언되었다는 것입니다. Spring 3.0은 모든 클래스를 Java 1.5 호환으로 제공하므로 문제를 해결할 수 있습니다. 업그레이드하기 전에 경고 또는 @SuppressWarning.


인터페이스는 원시 유형을 사용하도록 강제하기 때문에 (즉, 올바른 유형 정보를 지정할 수 없음)를 사용하지 않는 한 경고없이 구현할 수 없습니다 @SupressWarnings.

유일한 해결 방법은 인터페이스를 수정하는 것입니다 (예 : 정의하도록 설정 boolean supports(Class<?> aClass)).

참고 URL : https://stackoverflow.com/questions/1372595/class-is-a-raw-type-references-to-generic-type-classt-should-be-parameterized

반응형