j'ai une classe héritage que la classe elle-même est pas un générique, mais une de ses méthodes retour type utilise génériques:référence non générique aux résultats de classe génériques dans les types de retour non génériques
public class Thing {
public Collection<String> getStuff() { ... }
}
getStuff()
utilise génériques renvoyer une collection de chaînes. Par conséquent, je peux itérer sur getStuff()
et il n'y a pas besoin de jeter les éléments à un String
:
Thing t = new Thing();
for (String s: t.getStuff()) // valid
{ ... }
Cependant, si je change Thing
lui-même être un tout générique mais gardez bien le même:
public class Thing<T> {
public Collection<String> getStuff() { ... }
}
puis continuez à utiliser la référence non générique à Thing
, getStuff()
ne renvoie plus Collection<String>
et renvoie à la place un Collection
non typé. Ainsi, le code client ne compile pas:
Pourquoi est-ce? Quelles sont les solutions de contournement? Je suppose que, en utilisant une référence non générique à une classe générique, Java désactive tous les génériques pour la classe entière. C'est douloureux, parce que maintenant j'ai brisé mon code client en faisant de Thing un générique.
Editer: Je fais Thing générique pour une autre méthode qui n'est pas répertoriée dans l'exemple de code ci-dessus. Ma question est éducative quant à pourquoi ce qui précède ne peut être fait.
Je fais chose générique à cause d'une autre méthode (ne figure pas dans mon exemple). –
Si quelque chose est Chose (et pas Chose >), il ne compilera pas. Allez-y et essayez-le. –
Mal compris la question, changé. – cletus