2012-07-02 23 views
6

creé una prueba de unidad:¿Debo usar siempre genéricos?

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

he recibido la advertencia en Eclipse:

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

¿Debo escribir código como:

new Callable<Object>() 

para la eliminación de advertencia, o no? Parece solo una prueba junit y no tiene sentido agregar código adicional ... Gracias.

+1

Si le importan las pruebas (lo que debería hacer), escriba sus pruebas con el mismo estándar que el resto de su código; también deberán ser confiables y mantenerse ... – assylias

Respuesta

7

Si su operación no devuelve un valor (o no hay nada significativo que devolver). Debe usar java.lang.Void como parámetro de tipo.

new Callable<Void>() { 

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

} 
8

Sí, es una buena práctica evitar los tipos sin procesar y usar tipos genéricos. El uso de Callable<Object> deja en claro que el Callable está destinado a devolver cualquier tipo de objeto. El uso de Callable no deja eso en claro.

+0

a la mayoría de la gente le gustan los genéricos cuando no lo hacen tiene que escribir en las bibliotecas donde aparecen muchas firmas como '' o '' o '> R foo (R ref)'. Una de las razones por las que generalmente tengo desactivada la advertencia de tipos crudos (aunque normalmente soy diligente exponiendo w/las firmas supervertectas): D – bestsss

+0

El uso de 0 o de Callable deja en claro que el Callable está destinado a devolver cualquier tipo de objeto. Pero también puede ser confuso; no tengo intención de devolver nada. Uso Callable solo porque puede lanzar una excepción, así que puedo manejarlo en un bloque de código externo. – user710818

+2

Luego haga que sea un que se llame como @MartinK se muestra en su respuesta, lo que deja en claro que el Callable no devuelve nada. –

3

Runnable es un buen sustituto de Callable < Void>.

Cuestiones relacionadas