2012-07-02 4 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

большинство людей любят дженерики, когда они не должны писать библиотеки, в которых много подписей приходят как '' или '' или '> R foo (R ref)'. Одна из причин, по которой у меня обычно отключено предупреждение о необработанных типах (хотя я обычно стараюсь использовать w/супер подробные подписи): D – bestsss

+0

Использование Callable дает понять, что Callable предназначен для возврата любого объекта. Но это также может ввести в заблуждение - я ничего не хочу возвращать. Я использую Callable только потому, что он может генерировать исключение, поэтому я могу обработать его во внешнем блоке кода. – user710818

+2

Затем сделайте это Callable , как показывает @MartinK, что дает понять, что Callable ничего не возвращает. –

3

Runnable является хорошей заменой для Callable < Void>.