私は次のクラスを持っています(簡単な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クラスは、Spring 2.5の_org.springframework.validation.Validator
_クラスです。
サポートメソッドは、次のようなパラメーターを追加しようとすると、警告を表示しています(クラスは生の型です。ジェネリック型のクラスへの参照はパラメーター化する必要があります)
_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準拠であると宣言されていることです。Spring3.0は、すべてのクラスをJava 1.5準拠、これで問題が解決します。アップグレードする前に、警告または@SuppressWarning
。
インターフェイスは、未加工の型の使用を強制する(つまり、正しい型情報を指定することを許可しない)ため、_@SupressWarnings
_を使用しない限り、警告なしで実装することはできません。
唯一の本当の修正は、インターフェースを修正することです(つまり、boolean supports(Class<?> aClass)
を定義することです)。