[java] Klasse ist ein roher Typ. Verweise auf den generischen Typ <T> sollten parametrisiert werden



Answers

Da die Schnittstelle Sie zwingt, den unformatierten Typ zu verwenden (dh Sie können die korrekten @SupressWarnings nicht angeben), können Sie sie ohne Warnungen nur implementieren, wenn Sie @SupressWarnings .

Die einzige wirkliche Lösung besteht darin, die Schnittstelle zu reparieren (dh sie muss boolean supports(Class<?> aClass) definieren boolean supports(Class<?> aClass) ).

Question

Ich habe die folgende Klasse (aus einem einfachen Spring Tutorial)

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!");
            }
        }

    }
}

Die Validator-Klasse ist die org.springframework.validation.Validator Klasse aus Spring 2.5.

Die Methode Unterstützungen zeigt eine Warnung (Klasse ist ein Rohtyp. Verweise auf den generischen Typ Klasse sollten parametrisiert werden), wenn ich versuche, Parameter wie z

public boolean supports(Class<?> aClass) ...

Ich erhalte den folgenden Fehler:

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

Es gibt viele Threads über diese Art von Frage, aber ich möchte eine vollständige Antwort erhalten und es tatsächlich verstehen, ohne das Problem mit einem @SupressWarnings zu "verstecken"!




Related