Nickkk:
O código a seguir gera um aviso Unchecked cast: 'T' to 'U'
no IntelliJ IDEA:
interface A {}
class B<T extends A, U extends A> {
void f() {
final T t = null;
final U u = (U) t;
}
}
Isso não faz sentido para mim, uma vez T
e U
são definidos como o mesmo tipo. Qual é o problema?
Eles foram:
T
e U
não são definidos como o mesmo tipo. Eles são ambos definidos como extends A
, cujos meios T
e U
podem ser classes não relacionados que implementam a A
interface. Daí o elenco não é seguro.
O elenco só é seguro que você pode fazer é lançar as referências de tipo T
ou U
a digitar A
. Claro que você não precisa de um tal elenco. Você pode simplesmente atribuí-los a uma variável do tipo A
.