2012-07-02 11 views
6

Ich habe eine Unit-Test:Soll ich immer Generika verwenden?

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

ich Warnung in Eclipse erhalten haben:

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

Sollte ich schreiben Code wie:

new Callable<Object>() 

zur Beseitigung Warnung, oder nicht? Es scheint nur Junit-Test und es hat keinen Sinn, zusätzlichen Code hinzuzufügen ... Danke.

+1

Wenn Sie sich für das Testen interessieren (was Sie tun sollten), schreiben Sie Ihre Tests auf den gleichen Standard wie der Rest Ihres Codes - sie müssen zuverlässig und gepflegt sein ... – assylias

Antwort

7

Wenn Ihre Operation keinen Wert zurückgibt (oder gibt es nichts Sinnvolles zurückzugeben). Sie sollten java.lang.Void als Typparameter verwenden.

8

Ja, es ist eine gute Methode, rohe Typen zu vermeiden und generische Typen zu verwenden. Mit Callable<Object> wird klar, dass das Callable jede Art von Objekt zurückgeben soll. Die Verwendung von Callable macht das nicht klar.

+0

Die meisten Leute mögen Generika, wenn sie es nicht tun Ich muss die Bibliotheken schreiben, in denen viele Signaturen kommen wie '' oder '' oder '> R foo (R ref)'. Einer der Gründe, warum ich normalerweise die rohen Typen Warnung deaktiviert habe (obwohl ich in der Regel fleißig bin mit den super-ausführlichen Signaturen): D – bestsss

+0

Mit Callable wird klar, dass die Callable jede Art von Objekt zurückgeben soll. Aber es kann auch verwirrend sein - ich beabsichtige nichts zurückzugeben. Ich benutze Callable nur, weil es eine Exception auslösen kann, damit ich es im externen Codeblock behandeln kann. – user710818

+2

Dann machen Sie es zu einem Callable als @MartinK zeigt in seiner Antwort, die deutlich macht, dass das Callable nichts zurückgibt. –

3

Runnable ist ein guter Ersatz für Callable < Void>.

Verwandte Themen