Class<? extends MyClass> cls = (Class<? extends MyClass>) Class.forName(className);
someMethod(cls); // someMethod expects a Class<? extends MyClass>
Powyższe zestawienie zawiera ostrzeżenie "Bezpieczeństwo typu: Niezaznaczone rzutowanie z Class<capture#5-of ?>
na Class<? extends MyClass>
".Czy istnieje sposób, aby rzucić klasy, aby mieć określone parametry do klasy java.lang.Class <>?
Class<?> cls0 = Class.forName(className);
if (cls0 instanceof Class<? extends MyClass>) {
Class<? extends MyClass> cls = (Class<? extends MyClass>)cls0;
someMethod(cls);
}
Tym razem pojawia się błąd, ponieważ typu skasowaniem ...
Class<?> cls0 = Class.forName(className);
if (MyClass.class.isAssignableFrom(cls0)) {
Class<? extends MyClass> cls = (Class<? extends MyClass>)cls0;
someMethod(cls);
}
Tym razem wiem, że obsada jest bezpieczny, ale kompilator nie robi, i nadal daje ostrzeżenie. (Jeśli pytasz mnie, kompilator jest tutaj nieco grubszy.)
Czy istnieje sposób na uniknięcie tego ostrzeżenia (z wyjątkiem SuppressWarnings)?
ty „sprawdzone” przed cast, więc nie jest to dokładnie „niezaznaczone cast”. wiesz w tym przypadku lepiej niż kompilator, więc po prostu powiedz, żeby się wyluzować :) - powiązane - http://stackoverflow.com/questions/16611053/generics-oddity-i-can-insert-a-long-value-into -a-mapstring-string-and-it-co/16612897 # 16612897 – ZhongYu
Należy pamiętać, że 'Klasa' jest wyjątkowa, ponieważ reprezentuje swój własny parametr. – biziclop
Więc twój ostatni fragment kodu i '@ SuppressWarnings' jest sposobem na przejście tutaj lub o jeden krok lepiej jest [to] (http://stackoverflow.com/a/30466702/574479), który robi dokładnie to samo, co twój kod robi. – biziclop