Generics - Tipo non corrispondente quando fornisce un tipo concreto di una classe generica
-
28-09-2019 - |
Domanda
Semplice Java generici domanda:. Ho due classi - una delle quali utilizza farmaci generici per definire il tipo, l'altro che si estende questa classe che fornisce un tipo concreto
public class Box<Item> {
...
}
public class Toolbox extends Box<Tool>{
...
}
Dato che Toolbox estende Box fornendo uno strumento come il tipo effettivo per il segnaposto generico, avrei pensato che dovrebbe essere possibile fare qualcosa del genere:
Box<Tool> box = new Box();
Toolbox toolbox = box;
Tuttavia, sembra che questo provoca un tipo non corrispondente. Perché è questo?
Soluzione
Box<Item>
è il tipo generico non legato. Box<Tool>
è una particolare versione limite dello stesso tipo generico. Toolbox
è una sottoclasse di Box<Tool>
e quindi è di tipo discreto da Box<Tool>
.
Altri suggerimenti
Non è proprio un problema di farmaci generici. Il tuo problema è che si sta assegnando un oggetto di un tipo meno specifico ad una variabile di un tipo più specifico.
Si avrebbe avuto lo stesso problema, se si è tentato di assegnare un oggetto a una variabile stringa, anche se String estende oggetto.
Si dovrebbe, tuttavia, essere in grado di scrivere Box<Tool> box = new Toolbox();
con la struttura di classe data. Basta che non il contrario.