Tengo un código de enlace de Guice usando genéricos que compila y funciona bien desde el compilador de Eclipse, pero no desde el compilador de Java (línea de comandos). Me actualicé al último SDK de Java (1.7.0_01) pero sigo recibiendo el siguiente error.Java Generics Error: tipos inconvertibles del compilador de línea de comandos
[error] ...\BindCategorySelectorActivity.java:42: error: inconvertible types
[error] (Class<? extends ListAdapterDataProvider<Row<? extends DatabaseItem>>>) CategoryDataProvider.class);
[error] ^
[error] required: Class<? extends ListAdapterDataProvider<Row<? extends DatabaseItem>>>
[error] found: Class<CategoryDataProvider>
[error] 1 error
[error] {file:/.../compile:compile: javac returned nonzero exit code
código relevante:
public interface Category extends DatabaseItem {}
public class CategoryDataProvider implements
ListAdapterDataProvider<Row<Category>> {}
public class BindListViewHandlerWithSpecificProvider extends AbstractModule {
public BindListViewHandlerWithSpecificProvider(
Class<? extends ListAdapterDataProvider<Row<? extends DatabaseItem>>>
dataProviderClass) {}
}
@SuppressWarnings("unchecked")
// Error happens here:
final BindListViewHandlerWithSpecificProvider
bindListViewHandlerWithSpecificProvider =
new BindListViewHandlerWithSpecificProvider(
(Class<? extends ListAdapterDataProvider<Row<? extends DatabaseItem>>>)
CategoryDataProvider.class);
Bueno, se las arregló para compilar, pero no estoy seguro de si agregar el lanzamiento adicional a Object simplemente enmascaró el problema. Guice se bloquea con una excepción de puntero nulo al intentar enlazar. La línea que informa es acceder al 'bindListViewHandlerWithSpecificProvider'. Y recuerde, este código idéntico se compila y ejecuta sin errores cuando se compila dentro de Eclipse. –
Debo admitir que es un comportamiento curioso. Hacer el lanzamiento adicional a Object no hace más que engañar a javac de 'sideCast'ing. Deberías terminar con el mismo programa. –
¿Está familiarizado con el soporte agregado de Guice para genéricos y si habría un mejor mecanismo para pasar tipos parametrizados? ¿Alguna idea de si Scala proporciona una mejor asistencia para pasar tipos parametrizados? –