2012-07-02 9 views
6

Tôi tạo ra một thử nghiệm đơn vị:Tôi có nên luôn sử dụng Generics không?

new Callable() { 
@Override 
public Object call() throws 
     ..... 

tôi đã nhận được cảnh báo trong Eclipse:

Callable is a raw type. References to generic type Callable<V> 
should be parameterized 

Tôi có nên viết mã như:

new Callable<Object>() 

để loại bỏ cảnh báo, hay không? Có vẻ như chỉ kiểm tra junit và không có ý nghĩa để thêm mã bổ sung ... Cảm ơn.

+1

Nếu bạn quan tâm đến việc kiểm tra (bạn nên làm gì), hãy viết các bài kiểm tra của bạn vào cùng một tiêu chuẩn như phần còn lại của mã của bạn - chúng sẽ cần phải đáng tin cậy và duy trì ... – assylias

Trả lời

7

Nếu hoạt động của bạn không trả lại giá trị (hoặc không có gì có ý nghĩa để trả lại). Bạn nên sử dụng java.lang.Void làm thông số loại.

new Callable<Void>() { 

    public Void call() throws Exception { 
    // do work 
    return null; // <-- This statement is required. 
    } 

} 
8

Có, thực tiễn tốt là tránh các loại thô và sử dụng các loại chung. Sử dụng Callable<Object> làm rõ rằng Callable có ý định trả về bất kỳ loại đối tượng nào. Sử dụng Callable không làm rõ điều đó.

+0

hầu hết mọi người như generics khi họ không phải viết các thư viện có nhiều chữ ký giống như ' 'hoặc' ' hoặc '> R foo (R ref)'. Một trong những lý do tôi thường bị vô hiệu hóa cảnh báo thô (mặc dù tôi thường siêng năng đưa lên w/chữ ký siêu tiết): D – bestsss

+0

Sử dụng Gọi làm rõ rằng Callable có ý định trả về bất kỳ loại đối tượng nào. Nhưng nó cũng có thể gây nhầm lẫn - tôi không có ý định trả lại bất cứ điều gì. Tôi sử dụng Callable chỉ vì nó có thể ném ngoại lệ vì vậy tôi có thể xử lý nó trong khối mã bên ngoài. – user710818

+2

Sau đó, làm cho nó có thể gọi là khi @MartinK hiển thị trong câu trả lời của nó, điều này cho thấy rõ ràng rằng Cuộc gọi không trả lại bất kỳ điều gì. –

3

Runnable là giải pháp thay thế tốt cho Callable < Void>.