Class<? extends MyClass> cls = (Class<? extends MyClass>) Class.forName(className);
someMethod(cls); // someMethod expects a Class<? extends MyClass>
L'istruzione precedente fornisce un avviso "Tipo di sicurezza: cast non controllato da Class<capture#5-of ?>
a Class<? extends MyClass>
".C'è un modo per trasmettere una classe per avere parametri specifici per il java.lang.Class <> generico?
Class<?> cls0 = Class.forName(className);
if (cls0 instanceof Class<? extends MyClass>) {
Class<? extends MyClass> cls = (Class<? extends MyClass>)cls0;
someMethod(cls);
}
Questa volta ottengo un errore, a causa della cancellazione di tipo ...
Class<?> cls0 = Class.forName(className);
if (MyClass.class.isAssignableFrom(cls0)) {
Class<? extends MyClass> cls = (Class<? extends MyClass>)cls0;
someMethod(cls);
}
Questa volta ho so che il cast è sicuro, ma il compilatore non lo fa, e ancora dà L'avviso. (Se mi chiedi, il compilatore è un po 'spesso qui.)
C'è un modo per evitare questo avviso (ad eccezione di SuppressWarnings)?
voi "controllato" prima di lanci, quindi non è esattamente "getto incontrollato". lo sai meglio del compilatore in questo caso, quindi dillo e basta :) - related - http://stackoverflow.com/questions/16611053/generics-oddity-i-can-insert-a-long-value-into -a-mapstring-string-and-it-co/16612897 # 16612897 – ZhongYu
La cosa importante da ricordare è che 'Class' è speciale in quanto rappresenta il proprio parametro di tipo. – biziclop
Quindi il tuo ultimo frammento di codice e '@ SuppressWarnings' è il modo per andare qui o un passo migliore è [questo] (http://stackoverflow.com/a/30466702/574479), che fa esattamente la stessa cosa che il tuo codice lo fa. – biziclop