Próbuję utworzyć ImmutableMap
, który mapuje klasy na ciągi znaków (uwaga: to oczywiście przykład!). Jednak cośProblem z tworzeniem ImmutableMap z klasą <?> jako kluczem
ImmutableMap<Class<?>, String> map = ImmutableMap.of(
Integer.class, "Integer",
Date.class, "Date"
);
daje mi następujący błąd
Type mismatch: cannot convert from ImmutableMap<Class<? extends Object&Comparable<?>&Serializable>,String> to ImmutableMap<Class<?>,String>
dziwo to działa, jeśli dodam oddanych do Class<?>
jednego (!) Z kluczy, tzn
ImmutableMap<Class<?>, String> map = ImmutableMap.of(
Integer.class, "Integer",
Date.class, "Date",
(Class<?>) String.class, "String",
long.class, "Long"
);
będzie działać dobrze. Jestem zdziwiony tym zachowaniem: po pierwsze, dlaczego nie działa bez rzutów? Wszystkie te są klasami i naprawdę nie są bardziej ogólne niż Class<?>
, więc dlaczego to nie działa? Po drugie, dlaczego obsada jednego z kluczy sprawia, że działa?
(dygresja: jeśli zastanawiacie się, dlaczego nawet chce zrobić coś takiego - tak, to ze względu na odbicie ...)
Edit: I właściwie tylko zorientowali się, że to będzie działać, ale stil bym chciał zrozumieć powyżej zachowanie ruchowe
ImmutableMap<Class<?>, String> map = ImmutableMap.<Class<?>, String>builder()
.put(Integer.class, "Integer")
.put(Date.class, "Date")
.build();
Awesome. Dzięki! –
@ IngoBürk Nie ma za co :) –