Mam jakiś kod wiążący Guice, używając generycznych, które kompilują i działają dobrze od kompilatora Eclipse, ale nie z kompilatora Java (wiersza poleceń). Zaktualizowałem do najnowszego (1.7.0_01) pakietu Java SDK, ale nadal pojawia się następujący błąd.Błąd generowania języka Java: typy niewłączalne z kompilatora wiersza komend
[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
odpowiedni kod:
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);
Cóż, udało się skompilować, ale nie jestem pewien, czy dodanie dodatkowej obsady do obiektu po prostu maskowało problem. Guice zawiesza się przy wyjątku wskaźnika pustego przy próbie wiązania. Linia, której raportuje, uzyskuje dostęp do 'bindListViewHandlerWithSpecificProvider'. Pamiętaj, że ten identyczny kod kompiluje się i wykonuje bezbłędnie, gdy jest zbudowany w środowisku Eclipse. –
Przyznam, że to dziwne zachowanie. Wykonanie dodatkowej obsady w Object nie powoduje niczego poza wyłudzeniem javaca z 'sideCast'ing. Powinieneś skończyć skutecznie tym samym programem. –
Czy znasz obsługę Genika dla generycznych i czy istnieje lepszy mechanizm do przekazywania sparametryzowanych typów? Każdy pomysł, czy Scala zapewnia lepszą obsługę przekazywania parametrów sparametryzowanych? –