2012-07-02 60 views
6

我創建了一個單元測試:我是否應該始終使用泛型?

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

我已經在Eclipse中收到警告:

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

我應該寫如下代碼:

new Callable<Object>() 

消除警告,或不? 似乎只有junit測試,並沒有意義添加額外的代碼... 謝謝。

+1

如果你關心測試(你應該),寫你的測試,以相同的標準爲您的代碼的其餘部分 - 他們將需要可靠和維護太... – assylias

回答

7

如果你的操作沒有返回值(或沒有什麼有意義的返回)。您應該使用java.lang.Void作爲類型參數。

new Callable<Void>() { 

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

} 
8

是的,這是一個很好的做法,以避免原料的類型和使用泛型類型。使用Callable<Object>表明Callable旨在返回任何類型的對象。使用Callable沒有說清楚。

+0

大部分人都喜歡仿製藥時,他們不必須寫的地方很多簽名來像庫''或''或'>řFOO(R REF)'。其中一個原因,我通常有原始類型的警告關閉(儘管我平時勤快把瓦特/超冗長的簽名):d – bestsss

+0

使用可贖回清楚地表明瞭可贖回旨在返回任何類型的對象。但它也可能令人困惑 - 我不打算退還任何東西。我只使用Callable,因爲它可以拋出異常,所以我可以在外部代碼塊中處理它。 – user710818

+2

然後使其成爲可贖回作爲@MartinK顯示了它的答案,這清楚地表明,可調用不返回任何內容。 –

3

Runnable是Callable < Void>的很好替代品。

相關問題