Z efektywnej wersji drugiej wersji Java, punkt 28: "Nie używaj symboli wieloznacznych jako typów zwracania, zamiast zapewniać dodatkową elastyczność dla użytkowników, zmusiłoby to używać symboli wieloznacznych w kodzie klienta. "Dlaczego Guava TypeToken <T> .getRawType() zwraca klasę <? super T> zamiast klasy <T>
public final Class<? super T> getRawType()
Właśnie zostałem zaznajomienie się z symboli wieloznacznych generycznych zrozumieć ostatnią niesprawdzony ostrzeżenie rzucania mam w kawałku kodu piszę i nie rozumiem dlaczego getRawType() zwraca typ wieloznaczny.
class Base<T>{}
class Child<T> extends Base<T>{}
public <C> void test (TypeToken<? extends Base<C>> token) {
Class<? extends Base<C>> rawType = (Class<? extends Base<C>>) token.getRawType();
}
muszę rzucać token.getRawType(), ponieważ zwraca
Class<? super ? extends Base<C>>
Dzięki @newacct, to jest rzecz Nie zrozumiałem, ale ma sens, że ArrayList rozszerza ArrayList. Klasa super T> opisuje to, co powraca, chociaż jeśli chodzi o kod klienta, może równie dobrze zwrócić klasę >, ponieważ zawsze będziesz musiał ją przesłać. –
MikeB