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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top