La clase es un tipo sin procesar. Las referencias al tipo genérico Clase se deben parametrizar

Tengo la siguiente clase (de un simple tutorial de 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!"); } } } } 

Donde la clase Validator es la clase org.springframework.validation.Validator de Spring 2.5.

El método de soporte muestra una advertencia (Class es un tipo sin formato. Las referencias al tipo genérico Class deben estar parametrizadas), si bash agregar parámetros a esto, como

 public boolean supports(Class aClass) ... 

Obtuve el siguiente error:

The method supports(Class) of type CarValidator has the same erasure as supports(Class) of type Validator but does not override it

Hay muchos hilos sobre este tipo de preguntas, pero quiero obtener una respuesta completa y realmente entenderla sin ‘ocultar’ el problema con @SupressWarnings !

    La interfaz declara el método con un tipo sin formato. En ese caso, no puede anularlo bien sin tener la advertencia.

    El origen de su problema es que la interfaz de Spring fue declarada como compatible con Java 1.4. Tenga en cuenta que se supone que Spring 3.0 entregue todas las clases como compatibles con Java 1.5, por lo que solucionaría su problema. Antes de actualizar, creo que tendrías que vivir con la advertencia o @SuppressWarning .

    Como la interfaz lo obliga a usar el tipo sin @SupressWarnings (es decir, no le permite especificar la información de tipo correcta), no puede implementarlo sin advertencias a menos que use @SupressWarnings .

    La única solución real es arreglar la interfaz (es decir, definir los boolean supports(Class< ?> aClass) ).