2009-09-03 28 views
63

Tôi có lớp sau (từ một hướng dẫn đơn giản mùa xuân)Lớp là loại thô. Tài liệu tham khảo để chung loại Lớp <T> nên tham số

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

    } 
} 

Trường hợp lớp Validator là lớp org.springframework.validation.Validator từ mùa xuân 2,5.

Phương pháp hỗ trợ được hiển thị cảnh báo (Lớp là một loại nguyên liệu. Tài liệu tham khảo để chung loại lớp nên tham số), nếu tôi cố gắng thêm các thông số này như

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

tôi nhận được lỗi sau :

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

có rất nhiều chủ đề về loại câu hỏi, nhưng tôi muốn có được một câu trả lời đầy đủ và thực sự hiểu nó không có 'trốn' các vấn đề với một @SupressWarnings!

+0

+1 cho câu hỏi và thái độ tốt đẹp đối với người trả lời – KLE

+0

Bạn biết đấy, nếu bạn chấp nhận một trong các câu trả lời, bạn sẽ nhận được thêm một số điểm ... – KLE

+0

Xong. Cảm ơn nhiều lần nữa. –

Trả lời

32

Giao diện khai báo phương thức với loại thô. Trong trường hợp đó, bạn không thể ghi đè nó một cách độc đáo mà không có cảnh báo.

Nguồn gốc của sự cố của bạn là giao diện Spring được khai báo là tuân thủ Java 1.4. Lưu ý rằng Spring 3.0 có nghĩa vụ phân phối tất cả các lớp như tuân thủ Java 1.5, do đó sẽ khắc phục được sự cố của bạn. Trước khi bạn nâng cấp, tôi đoán bạn sẽ phải sống với cảnh báo hoặc @SuppressWarning.

+1

Cảm ơn tuyệt vời. Tôi sẽ phải sống với @SuppressWarning ngay bây giờ. –

+6

Tôi rất vui vì tôi có thể giúp bạn. Tôi thích nó mà bạn không chỉ muốn những thứ để làm việc, nhưng cũng muốn hiểu! Nếu bạn cần tìm một công việc ở miền nam nước Pháp ... ;-) – KLE

+0

Vẫn là trường hợp mà Spring LDAP gắn bó với các kiểu thô, phải không? Mặc dù phần cốt lõi của nó đòi hỏi Java 1.5? – AlbeyAmakiir

9

Vì giao diện buộc bạn sử dụng loại thô (tức là không cho phép bạn chỉ định thông tin loại chính xác), bạn không thể triển khai mà không có cảnh báo trừ khi bạn sử dụng @SupressWarnings.

Sửa chữa thực sự duy nhất là sửa giao diện (ví dụ: xác định giao diện boolean supports(Class<?> aClass)).

+0

Vâng, tôi có thể sống với @SuppressWarning ngay bây giờ, nhưng nếu tôi thay đổi thành hỗ trợ boolean (Class aClass), tôi sẽ bước vào thế giới loại xóa và điều đó thật khó chịu! Có cách tiếp cận khác hay tôi đợi Spring 3.0? –

Các vấn đề liên quan