Dato:Perché compare "Tipo generico non valido per instanceof"?
public class C<T> {
private class D {
public boolean equals(Object o) {
if (!(o instanceof D)) // line 4
return false;
D other = (D)o; // line 6
return i == other.i;
}
int i;
}
}
ottengo:
C.java:4: illegal generic type for instanceof
if (!(o instanceof D))
^
ho anche ottenere un "getto incontrollato" avvertimento circa la linea 6. Perché? Il o
è non un tipo generico - è solo un semplice Object
. Come posso implementare correttamente equals()
controllando e rilasciando un'istanza di D
?
Nota: Ovviamente, questo esempio di codice è una versione ridotta del mio codice effettivo. Le classi reali per C
e D
sono molto più grandi e D
è una classe interna private
di C
utilizzata dalla relativa implementazione.
FYI: il vero D
utilizza il parametro generico T
.
Hai provato * instanceof C.D * invece di * D * instanceof? –
Ho appena notato che l'esempio dato * è * rotto. –
@Evan: funziona. Ma perché è necessaria la qualifica? –